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
文件正确启动,并且我的导入按预期工作。
在我的 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
文件正确启动,并且我的导入按预期工作。