我在TypeScript文件中有以下代码:
define('myModule', [], function () {
var self = {
init: function () {
doSomething();
}
};
var dayNames:string[] = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
function doSomething () {
var current = new Date();
var day = dayNames[current.getDay()];
}
return self;
});
但是,它无法使用Visual Studio 2012 / Web Essentials 2012进行编译。
编译错误。有关详细信息,请参阅错误列表tsc.js(19148,13) Microsoft JScript运行时错误:无法获取属性的值 'elementType':object为null或undefined
奇怪的是,相同的代码似乎在TypeScript playground上编译得很好。我检查了 C:\ Program Files(x86)\ Microsoft SDKs \ TypeScript \ tsc.js 的版本,这是CodePlex(0.8.3.0)上的最新版本。
如果我注释掉以下行,它编译得很好:
var day = dayNames[current.getDay()];
下面的代码块也可以编译好:
var dayNames:string[] = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
function doSomething () {
var current = new Date();
var day = dayNames[current.getDay()];
}
那么我做错了什么?
答案 0 :(得分:3)
如果您在dayNames
声明之前移动self
的定义,那么它会很好地编译,因此在定义doSomething()
之前,您似乎正在调用dayNames
。
为什么会出现这种情况,为什么它不会产生更有用的编译错误我不确定 - 我会把它归结为TypeScript仍然是alpha代码。您可能希望将其作为CodePlex上的问题提出。
我注意到了其他一些这样的例子。例如,如果你有一个类在同一个文件中扩展另一个类,你需要先放基类,否则编译器有时会失败。
答案 1 :(得分:1)
更新为TypeScript 0.9.0后,似乎已解决此问题。