每个JavaScript程序都是TypeScript程序吗?

And*_*ykh 14 javascript typescript

打字稿语言规范说:

每个JavaScript程序也是一个TypeScript程序

现在考虑这段代码:

var i = 5;
i = "five";
Run Code Online (Sandbox Code Playgroud)

这是一个完全有效的javascript,无错误执行.它不是有效的TypeScript,也无法编译.

我对上面引用的语句和代码示例的理解明显不匹配.

您能否澄清一下,在上面给出的示例的上下文中,什么使规范声明成立.

更新

为了解决该陈述不反映程序有效性的论点,让我们这样重写:

每个JavaScript程序也是有效或无效的TypeScript程序

要么

每个JavaScript程序都不一定是有效的TypeScript程序

如果作者想说后者,他们为什么不这么说呢?

Dav*_*ret 13

似乎问的问题似乎是声明如下:

每个JavaScript程序也是一个语义正确的 TypeScript程序

那句话是错误的,但这不是这里所说的.

如果您尝试编译这个语法正确的TypeScript代码...

var i = 5;
i = "five";
Run Code Online (Sandbox Code Playgroud)

...您将收到编译错误,因为它在语义上不正确 - 它将字符串分配给隐式键入数字的变量.但是,由于它在语法上是正确的,.js除了抛出编译错误之外,编译器仍然会输出具有相同代码的文件.

那么每个JavaScript程序也都是TypeScript程序吗?是的,但这并不意味着您不会遇到编译错误.

旁注:您可以通过指定--noEmitOnError编译时停止编译器发出错误.


解决更新问题

他们可以做的是通过以下方式扩展:

每个语法正确的JavaScript程序也是一个语法正确的TypeScript程序.

但是,当您在其上下文中查看引用时,您可以看到在段落开头介绍的主要想法已经是关于语法:

TypeScript是JavaScript的语法糖.TypeScript语法是Ecmascript 5(ES5)语法的超集.每个JavaScript程序也是一个TypeScript程序.

因此,也许作者认为说"语法正确"本来就是重复的.


650*_*502 6

该短语应该在语法级别.代码

var i = 5;
i = "five";
Run Code Online (Sandbox Code Playgroud)

是有效的TypeScript 语法,但由于TypeScript执行的额外检查,将生成编译错误.

基本上该部分说TypeScript是一个扩展,而不是Javascript语法的重新设计(如果这是一件好事,或者不是真的取决于你的观点).

  • @zespri:这不是**语法**错误.基本上语句`i ="five";`是正确的......它是一个表达式语句,其中表达式是赋值运算符调用,左侧是标识符,右侧是文字.要确定这是否有效,还有其他需要符号查找的检查...例如,如果标识符已定义,是否为正确类型,依此类推.这种检查不是所谓的语言**语法**的一部分.例如,您没有收到"语法错误",您会收到"类型错误". (7认同)
  • `编译器可以检测到的唯一类型的错误是语法错误 - 显然是错误的.看看那些练习强类型的语言的编译器.在编译时以这种语言检测类型错误. (5认同)