Typescript 为什么TypeScirpt没有';t首先生成类?

Typescript 为什么TypeScirpt没有';t首先生成类?,typescript,Typescript,为什么使用此代码生成TypeScript编译器 var test = new Foo(); class Foo { constructor() { } } 这次失败了 var test = new Foo(); var Foo = (function () { function Foo() { } return Foo; })(); 而不是这个 var Foo = (function () { function Foo() { }

为什么使用此代码生成TypeScript编译器

var test = new Foo();

class Foo {
    constructor() {

    }
}
这次失败了

var test = new Foo();

var Foo = (function () {
    function Foo() {
    }
    return Foo;
})();
而不是这个

var Foo = (function () {
    function Foo() {
    }
    return Foo;
})();

var test = new Foo();

我无法想象任何原因,为什么不先生成类…

很容易看出这个简单的代码顺序不正确

然而,几乎不可能获取任何代码并确定其顺序是否正确。要获取任何代码并始终生成正确的顺序,甚至比这更困难。正确的顺序很可能不存在

即使在每个文件的基础上解决了这个问题,也没有什么可以阻止您打乱网页上
script
标记的顺序,从而导致排序问题


考虑到所有这些,编译器只有一条关于排序的简单规则:代码按照您指定的顺序发出。

Typescript不会对代码进行任何语义排序

它与这段代码相同:

var b = x; 
x=123;
var x;

由于TS使用IIFE定义类,因此生成的Foo是函数表达式而不是函数声明。如果它是一个声明,那么您的代码就可以工作了。TS可能会将所有类操作移到顶部,但真正的问题是,为什么要以失败的顺序开始编写它。