打字稿错误"类不是构造函数"

时间:2016-05-31 19:29:28

标签: typescript ecmascript-6

我在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

3 个答案:

答案 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

1.8.10中的

给出:

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 Carsundefined

在掌握中,(1)的输出改为Cars = class Cars {,因此它会分配给var CarsgetSize()

答案 2 :(得分:2)

确保您在同一目录中没有.js.ts个文件。这可能是由IDE引起的。