2013-04-30 60 views
2

我有一个打字稿文件下面的代码:无法获得属性的值“元素类型”:对象为空或未定义

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 /网络要点2012编译。

Compile Error. See error list for details tsc.js(19148, 13) Microsoft JScript runtime error: Unable to get value of the property 'elementType': object is null or undefined

奇怪的是,相同的代码似乎编译在TypeScript playground罚款。我已经检查了CodeBlex(0.8.3.0)上最新版本的C:\ Program Files(x86)\ Microsoft SDKs \ TypeScript \ tsc.js的版本。

如果我注释掉以下行,它编译罚款:

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()]; 
} 

那我做错了吗?

回答

3

如果您在self声明之前移动的dayNames定义它编译罚款所以会出现你调用doSomething()定义dayNames之前。

为什么会出现这种情况,以及为什么它不会生成更有用的编译器错误我不确定 - 我会把它放到仍然是Alpha代码的TypeScript上。您可能需要将其作为CodePlex上的问题提出。

我注意到了其他一些这样的例子。例如,如果您有一个在同一文件中扩展另一个类的类,则需要先放置基类,否则编译器有时会翻倒。

+0

是的,编译。期待解释! – 2013-04-30 11:11:31

+0

其他人可能有一个,但不幸的是我没有。 – JcFx 2013-04-30 11:14:15

+0

+1,就像JcFx说的,自我依赖于doSomething取决于dayNames。所以我会把dayNames - > doSomething - > self。但是dayname - > self - > doSomething也可以正常工作。 – basarat 2013-04-30 13:31:53

相关问题