类定义顺序

时间:2014-12-08 19:00:09

标签: class typescript

有人可以解释为什么以下打字稿代码编译?在我看来,它永远无法成功运行。

class Xyz
    {
    static x : Abc = new Abc();
    }

class Abc
    {

    }

2 个答案:

答案 0 :(得分:1)

没有编译时错误,因为它等同于这个语法上有效的JavaScript

var Xyz = (function () {
    function Xyz() {
    }
    Xyz.x = new Abc();
    return Xyz;
})();
var Abc = (function () {
    function Abc() {
    }
    return Abc;
})();

但由于您在Abc定义之前尝试实例化Abc成员,因此会出现运行时错误。

答案 1 :(得分:1)

TypeScript不会对代码中的构造排序执行任何强制执行。考虑 有效的一些轻微变体 - 在订购方面不应该立即允许或禁止哪些内容。

class Xyz
    {
    static x = () => new Abc();
    }

class Abc
    {

    }

有一个issue tracking将此作为简单案例的选项添加。