【问题标题】:Cannot compile typescript using tsc node module无法使用 tsc 节点模块编译打字稿
【发布时间】: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 模块是否有问题或者我遗漏了什么?

【问题讨论】:

    标签: npm typescript 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 在那里时。
    猜你喜欢
    • 2018-04-20
    • 2014-07-07
    • 2018-07-30
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多