我在ES6目标环境中运行以下打字稿代码,它说"汽车不是构造函数"
我已关注link并尝试将目标环境更改为ES5。它工作正常。有人可以说明为什么它不适用于目标ES6。
这是我的TypeScript代码:
export class Cars {
constructor(public len: number,public wid: number) { }
}
export function getSize(): Cars {
return new Cars(20, 30);
};
错误是"汽车不是构造函数"在函数getSize中。
顺便说一句,我正在尝试使用Systemjs加载所有文件。
顺便说一句,我在浏览器中收到错误........而不是在编译时......
以下是上述打字稿的编译代码......
System.register([], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var Cars;
function getSize() {
return new Cars(20, 30);
}
exports_1("getSize", getSize);
return {
setters:[],
execute: function() {
class Cars {
constructor(len, wid) {
this.len = len;
this.wid = wid;
}
}
;
exports_1("Cars", Cars);
}
}
});
//# sourceMappingURL=Cars.js.map
答案 0 :(得分:2)
我不确定,但我认为这取决于TypeScript版本。
请尝试声明:
class Cars {
constructor(public len: number,public wid: number) { }
}
export function getSize(): Cars {
return new Cars(20, 30);
};
export { Cars };
答案 1 :(得分:2)
(从the GH issue you opened.复制我的帖子)
这是TS 1.8.10中的一个错误,并在master中修复。
tsc -t es6 ./foo.ts -m system
给出:
System.register([], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var Cars;
function getSize() {
return new Cars(20, 30);
}
exports_1("getSize", getSize);
return {
setters:[],
execute: function() {
class Cars { // (1)
constructor(len, wid) {
this.len = len;
this.wid = wid;
}
}
exports_1("Cars", Cars);
}
}
});
所以getSize
最终使用的是var Cars
,undefined
。
在掌握中,(1)
的输出改为Cars = class Cars {
,因此它会分配给var Cars
和getSize()
。
答案 2 :(得分:2)
确保您在同一目录中没有.js
和.ts
个文件。这可能是由IDE引起的。