任何JavaScript代码都是有效的TypeScript代码吗?

meh*_*dvd 15 javascript typescript

目前我已经开始学习了TypeScript.从我研究过的文档中TypeScript,我看到了一些纯JavaScript代码可以编译为TypeScript代码的示例.

我的问题是:TypeScript语言的设计方式是任何JavaScript代码都是有效的TypeScript代码吗?

所以任何.js一个都是有效的.ts文件!?

Dic*_*ink 11

没有任何有效的JavaScript代码是有效的TypeScript,请参阅下面的示例.

var testVar = 4;
testVar = "asdf";
Run Code Online (Sandbox Code Playgroud)

TypeScript提供以下错误:无法将字符串转换为数字.要在TypeScript中使用,请添加":any",如下所示.

var testVar: any = 4;
testVar = "asdf"
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为TypeScript注意到了testVar,并且在声明中为它分配了一个数字,因此它决定它应该保留一个数字.

  • 只有在Typescript编译器选项"noImplicitAny"为"true"时才会出现这种情况.它是`false`,这是默认情况,是有效的Typescript. (3认同)
  • 打字稿中的另一个例子`foo = 123`无效,因为`foo`永远没有被声明,即没有`var` PS这个代码也会在严格的模式javascript中失败. (2认同)

Pac*_*ac0 9

假设有效代码意味着:在语法规范方面语法正确.

那么答案是肯定的.


它记录在TypeScript规范(第2段)中:

TypeScript是JavaScript的语法糖.TypeScript语法是ECMAScript 2015(ES2015)语法的超集. 每个JavaScript程序也是一个TypeScript程序.

(强调我的)

现在,大多数情况下,您不希望基本的JavaScript被"不受控制"地使用.毕竟,这是首先创建TypeScript语言的原因之一!

然而,有效的JavaScript程序技术上有效的TypeScript.这在规范中可能需要"向后兼容",或者更好地制定,需要取代 ECMAScript


以另一个答案的例子,Typescript代码

var testVar = 4;
testVar = "asdf";
Run Code Online (Sandbox Code Playgroud)

将被转换为完全相同的JavaScript代码(具有所有默认编译器选项)

在Typescriptlang.org playground上演示

即使存在TypeScript错误,也不会阻止从那里输出有效的javascript.它"编译错误".(我希望这被称为警告而不是错误,但无论如何).


另见:https://basarat.gitbooks.io/typescript/content/docs/why-typescript.html

您的JavaScript是TypeScript

TypeScript为JavaScript代码提供编译时类型安全性.鉴于它的名字,这并不奇怪.最棒的是这些类型是完全可选的.您的JavaScript代码.js文件可以重命名为.ts文件,TypeScript仍然会返回与原始JavaScript文件等效的有效.js文件.TypeScript是有意且严格地是JavaScript的超集,具有可选的类型检查.

可以取消激活此行为的最简单选项(即使存在类型错误,也输出js) --noEmitOnError