【发布时间】:2017-06-05 13:15:36
【问题描述】:
在我的 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 上运行。
【问题讨论】:
-
也许我遗漏了一些东西,但你的代码对我来说似乎是正确的。也许值得在 TypeScript 的 GitHub 问题跟踪器上提出这个问题?
-
编译后的导入代码看起来不错,但是编译后的导出代码是什么样的呢?从打字稿代码来看,它确实应该提供一个带有
.settings变量的模块对象。
标签: javascript node.js typescript ecmascript-6 es6-modules