无法使用 tsc 节点模块编译打字稿

Posted

技术标签:

【中文标题】无法使用 tsc 节点模块编译打字稿【英文标题】:Cannot compile typescript using tsc node module 【发布时间】:2012-09-27 07:36:11 【问题描述】:

我正在尝试使用 tsc 节点包模块将打字稿编译成 javascript。首先,我使用npm install -g typescript 安装了模块。 在我的本地目录中,我创建了一个名为 classes.js 的文件,其中包含有效的打字稿代码。运行tsc classes.js 时出现以下错误:Error reading file "./classes.js": File not found

该错误没有多大意义,因为该文件存在。使用绝对文件路径时显示相同的错误。我想知道 tsc 模块是否有问题或者我遗漏了什么?

【问题讨论】:

【参考方案1】:

typescript 编译器专门寻找扩展 .str.ts。下面是解析输入文件名的代码:

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

然后编译器查找名称为normalizedPath 的文件,在您的情况下,该文件对应于不存在的classes.js.ts。在我看来,编译器应该在这里输出更好的错误信息。

【讨论】:

我不明白为什么一个工具会关心它应该编译的文件的扩展名。另外,在不使用--out文件时,不会将编译好的js输出到控制台。 嗯,我认为在大多数情况下这实际上是有道理的。例如,考虑一个必须处理 .h.c 文件的 C 编译器。我只是要求javac 编译器编译一个文件Test.c,它拒绝这样做。 文件扩展名很重要,因为.d.ts 文件的***语法与.ts 的语法不同。可以说,在没有其他信息的情况下,编译器应该假定 .ts,但正如 @Valentin 所指出的,对于大多数编译器来说,这并不是真正的标准行为。【参考方案2】:

显然,tsc 节点模块仅在编译的 typescript 文件具有 ts 扩展名时才有效。我相信这是一个暂时的限制,可以在未来版本的 tsc 中修复。

【讨论】:

我使用的是 0.9.1.1,但尚未修复。 c:\Temp>tsc --declaration foo.js 给了我彻底的误导:error TS5007: Cannot resolve referenced file: 'foo.js'.foo.js 在那里时。

以上是关于无法使用 tsc 节点模块编译打字稿的主要内容,如果未能解决你的问题,请参考以下文章

Babel 模块解析器无法按预期工作(节点 + 打字稿)

如何使用带有打字稿的“调试”模块

打字稿 tsc --declaration

ng构建无法从Git Bash中找到打字稿模块

打字稿编译器找不到带有纱线的节点-找不到“节点”的类型定义文件

崇高文字3中的打字稿构建系统无法正常工作