【发布时间】:2013-02-21 14:21:12
【问题描述】:
这个打字稿:
export enum UID {
FACTORY,
ROBOT
}
编译成这个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;
我不得不承认代码对我来说似乎相当晦涩,但我相信 tsc 编译器知道它在做什么。不幸的是,javascript无法执行。 nodejs 抱怨说:
(函数(UID){
^ 类型错误:对象不是函数
at ...
我做错了什么?
更新: Matt B. 解决了这个问题。这是 typescript 编译器中的一个已知错误。 tsc 无法在 require 语句后插入分号,这可能会导致奇怪的错误。手动将分号添加到我的代码中解决了这个问题。这是codeplex问题的链接: http://typescript.codeplex.com/workitem/364
更新 2: 对于那些遇到同样错误的人。您可以手动插入缺少的分号,但这不是一个非常舒适的解决方案,因为您必须在每次编译后执行此操作。我注意到这个问题只发生在枚举上。项目中有很多其他模块,但没有一个模块导致此错误。显然,类定义并没有被前面缺少的分号“伤害”。只需将枚举的定义移到您的一个类定义后面,错误就会消失。将枚举移到接口后面是不够的,因为接口没有直接等价物,只是被编译器删除了
【问题讨论】:
-
这是整个脚本吗?
-
第二个
)(在您的错误消息中)不应该存在:(function (UID)) {。代码部分工作正常:jsfiddle.net/antisanity/cRNeN -
与另一个文件的连接不正确?
-
错误信息中的代码和上面贴的代码不一样。错误包含双
),而不是发布的示例。 -
不需要,因为你在 node.js 中,所以
exports已经定义了。
标签: javascript node.js compiler-construction typescript