使用tsc节点模块无法编译TypeScript

3
我正在尝试使用tsc node包模块将typescript编译为JavaScript。首先,我使用“npm install -g typescript”命令安装了该模块。在本地目录中,我创建了一个名为classes.js的文件,其中包含有效的typescript代码。当运行“tsc classes.js”命令时,出现以下错误:“Error reading file "./classes.js": File not found”。这个错误没有多大意义,因为该文件确实存在。即使使用绝对文件路径也会显示相同的错误。我想知道是tsc模块有问题还是我漏掉了什么东西?
2个回答

3

Typescript编译器特别寻找扩展名为.str.ts的文件。以下是解决输入文件名的代码:

if(!TypeScript.isSTRFile(normalizedPath) && !TypeScript.isTSFile(normalizedPath)) {
    normalizedPath += ".ts";
}  

编译器接着寻找名为 normalizedPath 的文件,而在您的情况下对应的是 classes.js.ts 文件,但该文件并不存在。我认为编译器应该在此处输出更好的错误信息。

我不明白为什么一个工具会关心它应该编译的文件的扩展名。此外,当未使用--out文件时,它不会将编译后的js输出到控制台。 - Alex Objelean
嗯,我认为在大多数情况下这是有道理的。例如考虑一个需要处理.h.c文件的C编译器。我刚刚让javac编译器编译一个名为Test.c的文件,但它拒绝了。 - Valentin
文件扩展名很重要,因为.d.ts文件的顶级语法与.ts的语法不同。可以说,如果没有其他信息,编译器应该假定.ts,但正如@Valentin所指出的那样,这对大多数编译器来说并不是真正的标准行为。 - Ryan Cavanaugh

0

显然,tsc节点模块仅在编译的TypeScript文件具有ts扩展名时才起作用。我相信这是一个暂时的限制,未来版本的tsc可能会修复这个问题。


我正在使用0.9.1.1版本,但问题仍未解决。执行c:\Temp>tsc --declaration foo.js命令时,出现了误导性极大的错误信息:error TS5007: Cannot resolve referenced file: 'foo.js'. 但实际上 foo.js 文件是存在的。 - vegemite4me

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接