【问题标题】:TypeScript compiler does not throw error on missing declarationTypeScript 编译器不会在缺少声明时抛出错误
【发布时间】:2016-02-06 05:39:51
【问题描述】:

我在我的 NodeJS 项目中发现了这个奇怪的案例。我将尝试在这里描述我的问题,相信tsconfig.json 中有一个简单的选项恰好适合这种情况。我使用 TypeScript v1.7.3。

文件test1.ts 包含变量声明:

// test1.ts
let a = 1;

文件test2.ts 包含不正确的变量使用:

// test2.ts
console.log(a);

tsconfig.json 看起来像这样:

// tsconfig.json
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5"
  }
}

编译器确实向我抛出一个错误,我正在使用未声明的变量a。但是如果我尝试导出其他变量,比如b,我们会得到预期的错误:

// test1.ts
let a = 1;
export let b = 2;

编译器:

Error:(1, 13) TS2304: Cannot find name 'a'.

如何让编译器在第一种情况下发出错误?我刚刚在我的项目中发现我突然删除了一个变量,它在 runtime 中失败,而不是在compile time

【问题讨论】:

    标签: node.js typescript


    【解决方案1】:

    这是一个不幸的结果,即没有某种导出或导入的文件被编译器视为“脚本”文件。编译器假定脚本文件只在全局范围内运行,并且只会被拼接在一起。如果不指定--outFile,将无法确定变量声明在使用后是否会发生。

    一种解决方法是添加一个

    export {};
    

    声明您的文件。

    【讨论】:

    • 是的,这是我们自己想出来的。奇怪的是编译器没有选项可以禁用它。
    猜你喜欢
    • 2018-09-19
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 2011-03-30
    相关资源
    最近更新 更多