2

我在 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”的值:对象为空或未定义

奇怪的是,相同的代码似乎在TypeScript 游乐场上编译得很好。我检查了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()];
}

那么我做错了什么?

4

2 回答 2

3

如果您dayNames在声明之前移动定义,self它编译得很好,所以看起来您在定义doSomething()之前调用dayNames

为什么会这样,以及为什么它不会产生更有用的编译器错误,我不确定——我将其归结为 TypeScript 仍然是 alpha 代码。您可能想在CodePlex上将其作为问题提出。

我注意到其他一些类似的情况。例如,如果您在同一个文件中有一个类扩展了另一个类,则需要将基类放在第一位,否则编译器有时会崩溃。

于 2013-04-30T11:09:05.340 回答
1

这似乎在更新到TypeScript 0.9.0后得到解决。

于 2013-05-01T08:59:39.633 回答