声称TypeScript是Javascript的超集。 这是关于这个的堆栈question。 这是报价的引用:
TypeScript是JavaScript的语法糖。 TypeScript语法是一个 ECMAScript 2015(ES2015)语法的超集。每个JavaScript程序 也是一个TypeScript程序。
所以我的理解是,任何独立的javascript文件都可以被视为有效的打字稿代码,即由tsc编译器编译(可能带有一些额外的标志)。
但这是js代码的一个例子:
class ClassA {}
ClassA.prototype.ping = () => {console.log('PING')}
这是有效的javascript,但如果您尝试使用typescript编译它,您将获得:
error TS2339: Property 'ping' does not exist on type 'ClassA'
可以声明ClassA可以实现的接口,同样,编写这样的代码(组合类和原型语法)非常不典型 - 但是 - 这看起来像是一个有效的js代码的例子,它在用tsc编译时会引发错误。
所以问题是 - 这与规范的引用并不矛盾?
答案 0 :(得分:5)
TypeScript是JavaScript的语法超集,不会改变JavaScript的运行时行为。因此,您在JavaScript中编写的任何表达式或语句或声明都是语法合法的TypeScript。
这并不意味着所有JS代码都被认为是无警告的TypeScript。毕竟,TypeScript的一个主要目标是识别错误的结构,如
var s = "hello world" * 423;
var t = "qzz".subtr(2);
var u = [1, 2, 3] + 5;
var w = window.navgtator;
这些都是“有效的”JavaScript表达式,它们碰巧会有人们不想实际做的不良运行时行为。
与TypeScript一样,您可以告诉类型系统有关额外信息的信息
class ClassA {}
// Declare additional method
interface ClassA { ping(): void; }
// OK
ClassA.prototype.ping = () => {console.log('PING')}