【问题标题】:Unable to get value of the property 'elementType': object is null or undefined无法获取属性“elementType”的值:对象为空或未定义
【发布时间】:2013-04-24 06:33:07
【问题描述】:

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

那我做错了什么?

【问题讨论】:

    标签: javascript visual-studio-2012 typescript web-essentials


    【解决方案1】:

    如果您将dayNames 的定义移到self 声明之前,它可以正常编译,因此您似乎在定义dayNames 之前调用了doSomething()。

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

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

    【讨论】:

    • 是的,编译。期待解释!
    • 别人可能有,但不幸的是我没有。
    • +1 ,就像 JcFx 说 self 取决于 doSomething 取决于 dayNames。所以我会放 dayNames -> doSomething ->self 。但是 dayname -> self ->doSomething 也可以正常工作。
    • 这很好,但我们真的希望根据这样的依赖关系来订购我们的代码吗?似乎是编译器的严重限制和生产力/维护的倒退(该语言旨在改进)。已提出问题here。
    【解决方案2】:

    更新到TypeScript 0.9.0后似乎解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2012-06-11
      • 1970-01-01
      • 2023-03-25
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多