TypeScript "import { myVar }" 语法似乎在 Node/CommonJS/ES5 应用程序中编译不正确

TypeScript "import { myVar }" syntax seems to be incorrectly compiling in a Node/CommonJS/ES5 app

在我的 Node 应用程序中,我有一个设置文件将一些设置导出为一个对象,如下所示:

// settings.ts
export var settings = {
    port: 1234
}

在另一个文件中,我导入这些设置并尝试引用 port 属性:

// another-file.ts
import { settings } from './settings';
console.log(settings.port);

此代码编译正确,但在运行时出现以下错误:

Cannot read property 'port' of undefined

当我检查编译后的代码时,我可以看到这是因为我上面的第二个文件编译成这样:

var settings_1 = require("./settings");
console.log(settings_1.settings.port);

如果我用我的调试器遍历编译后的代码,我可以看到 settings_1 变量指向从 settings.ts 导出的值。也就是说,我的port属性住在settings_1.port住在settings_1.settings.port。似乎 TypeScript 编译器应该生成这个 JavaScript 代码:

var settings = require("./settings");
console.log(settings.port);

我是不是做错了什么?还是 TypeScript 编译器错误地编译了我的导入?

我知道 TypeScript 编译器正在对我的导入进行正确的类型检查;如果我这样做:

import { settings } from './settings';
console.log(settings.propertyThatDoesNotExist);

我收到 propertyThatDoesNotExist 不存在的编译器错误。

我正在使用 TypeScript 2.3.2,目标 "es5" 并输出 "commonjs" 个模块,运行 在 Node 6.9.2 上。

想通了。这对我来说是一个愚蠢的错误(不是总是这样吗?)。我正致力于将应用程序从 JavaScript 转换为 TypeScript,我将 settings.js 复制并重命名为 settings.ts... 但我没有删除 settings.js。结果,我 实际上 导入了我的旧 settings.js 文件,该文件的导出设置不同。

删除 settings.js 后,我的应用程序使用 .ts 文件正确启动,并且我的导入按预期工作。