Typescript生成的JavaScript具有一个不是函数的函数

lhk*_*lhk 1 javascript compiler-construction node.js typescript

这个打字稿:

export enum UID {
    FACTORY,
    ROBOT
}
Run Code Online (Sandbox Code Playgroud)

编译到这个javascript:

(function (UID) {
    UID._map = [];
    UID._map[0] = "FACTORY";
    UID.FACTORY = 0;
    UID._map[1] = "ROBOT";
    UID.ROBOT = 1;
})(exports.UID || (exports.UID = {}));
var UID = exports.UID;
Run Code Online (Sandbox Code Playgroud)

我不得不承认代码似乎对我来说相当模糊,但我相信tsc编译器知道它在做什么.不幸的是,javascript无法执行.nodejs抱怨说:

(function(UID){

^ TypeError:object不是函数

at ...
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

更新:马特B.解决了这个问题.这是typescript编译器中的已知错误.tsc在require语句后无法插入分号,这可能会导致奇怪的错误.手动将分号添加到我的代码中解决了问题.这是codeplex问题的链接:http: //typescript.codeplex.com/workitem/364

更新2: 对于那些遇到相同错误的人.您可以手动插入缺少的分号,但这不是一个非常舒服的解决方案,因为您必须在每次编译后执行此操作.我注意到问题只发生在enum上.项目中有许多其他模块,但没有一个模块导致此错误.显然,类定义不会被前面缺少的分号"伤害".只需将枚举的定义移到一个类定义后面,错误就会消失.将枚举移到接口后面是不够的,因为接口没有直接的等价物,只是被编译器删除了

Mat*_*wne 6

我认为这与此处描述的问题相同 - 原因是在require()声明后丢失了分号:

打字稿生成不起作用的javascript

在另一个编译文件中是否有这样的行?

var UID = require('UID')

如果是这样,请尝试在结尾处添加分号:

var UID = require('UID');

这似乎是一个TypeScript错误; 这是错误报告(投票了!):http://typescript.codeplex.com/workitem/364