我经常听到人们发表这样的陈述
所有JavaScript代码都是合法的TypeScript代码
要么
TypeScript是JavaScript的超集
但是当我写出一些完全合法且合理的 JS代码时,它们具有完全确定性的行为:
var x = "hello".substr("w").toStrig * { m: 3 / true } + window + parseInt(Element).fzq;
Run Code Online (Sandbox Code Playgroud)
ECMAScript定义x应该具有"NaN[object Window]undefined"看起来完全正常的值,但是我从TypeScript得到了一堆错误!是不是这句话"所有JS都是TS"的谎言呢?这是怎么回事?
声称TypeScript是Javascript的超集.这是关于Stack 的问题.以下是规格引用:
TypeScript是JavaScript的语法糖.TypeScript语法是ECMAScript 2015(ES2015)语法的超集.每个JavaScript程序也是一个TypeScript程序.
所以我的理解是,任何独立的javascript文件都可以被视为有效的打字稿代码,即通过tsc编译器编译(可能带有一些额外的标志).
但这是js代码的一个例子:
class ClassA {}
ClassA.prototype.ping = () => {console.log('PING')}
Run Code Online (Sandbox Code Playgroud)
这是有效的JavaScript,但如果您尝试使用typescript编译它,您将得到:
error TS2339: Property 'ping' does not exist on type 'ClassA'
可以声明ClassA可以实现的接口,同样,编写这样的代码(组合类和原型语法)是非常不典型的 - 但是 - 这看起来像一个有效的js代码的例子,它在用tsc编译时引发错误.
所以问题是 - 这与规范的引用不相矛盾?