Typescript 为什么TypeScirpt没有';t首先生成类?
为什么使用此代码生成TypeScript编译器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() { }
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可能会将所有类操作移到顶部,但真正的问题是,为什么要以失败的顺序开始编写它。