无法使用 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 节点模块编译打字稿的主要内容,如果未能解决你的问题,请参考以下文章