目前我已经开始学习了TypeScript。从我研究过的文档中TypeScript,我看到了一些JavaScript可以将纯代码编译为TypeScript代码的示例。
我的问题是:TypeScript 语言的设计方式是否使任何 JavaScript 代码都成为有效的 TypeScript 代码?
即任何.js文件都是有效.ts文件吗?
目前我已经开始学习了TypeScript。从我研究过的文档中TypeScript,我看到了一些JavaScript可以将纯代码编译为TypeScript代码的示例。
我的问题是:TypeScript 语言的设计方式是否使任何 JavaScript 代码都成为有效的 TypeScript 代码?
即任何.js文件都是有效.ts文件吗?
让我们假设有效的代码意味着 :就语言规范而言在语法上是正确的。
那么答案是肯定的。
它写在TypeScript 规范(第二段)中:
TypeScript 是 JavaScript 的语法糖。TypeScript 语法是 ECMAScript 2015 (ES2015) 语法的超集。 每个 JavaScript 程序也是一个 TypeScript 程序。
(强调我的)
现在,您通常不希望“不受控制”地使用基本的 JavaScript。毕竟,这是首先创建 TypeScript 语言的原因之一!
然而,有效的 JavaScript 程序在技术上是有效的 TypeScript。这在规范中可能是因为需要“向后兼容”,或者更好地表述,需要取代ECMAScript
以另一个答案为例,Typescript 代码
var testVar = 4;
testVar = "asdf";
将被转译为完全相同的 JavaScript 代码(带有所有默认编译器选项)
即使存在 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
没有任何有效的 JavaScript 代码是有效的 TypeScript,请参见下面的示例。
var testVar = 4;
testVar = "asdf";
TypeScript 给出以下错误:无法将字符串转换为数字。要使其在 TypeScript 中工作,请添加“:any”,如下所示。
var testVar: any = 4;
testVar = "asdf"
发生这种情况是因为 TypeScript 注意到 testVar 被声明并且在声明中它被分配了一个数字,因此它决定它应该保持一个数字。