任何JavaScript代码都是有效的TypeScript代码吗?
目前我已经开始学习任何JavaScript代码都是有效的TypeScript代码吗?,javascript,typescript,Javascript,Typescript,目前我已经开始学习TypeScript。从我为TypeScript研究的文档中,我看到了一些纯JavaScript代码可以编译为TypeScript代码的示例 我的问题是:TypeScript语言的设计方式是否使任何JavaScript代码都是有效的TypeScript代码? i、 e.是否有任何.js文件是有效的.ts文件?没有任何有效的JavaScript代码是有效的TypeScript请参见下面的示例 var testVar = 4; testVar = "asdf"; TypeScri
TypeScript
。从我为TypeScript
研究的文档中,我看到了一些纯JavaScript
代码可以编译为TypeScript
代码的示例
我的问题是:TypeScript语言的设计方式是否使任何JavaScript代码都是有效的TypeScript代码?
i、 e.是否有任何
.js
文件是有效的.ts
文件?没有任何有效的JavaScript代码是有效的TypeScript请参见下面的示例
var testVar = 4;
testVar = "asdf";
TypeScript出现以下错误:
无法将字符串转换为数字。
要使其在TypeScript中工作,请添加“:any”,如下所示
var testVar: any = 4;
testVar = "asdf"
这是因为TypeScript注意到testVar被声明,并且在声明中它被分配了一个数字,因此它决定它应该保持为一个数字。让我们假设有效的代码意味着:就语言规范而言,在语法上是正确的
那么答案是肯定的
它写在(第二段): TypeScript是JavaScript的语法糖。 TypeScript语法是ECMAScript 2015(ES2015)语法的超集。 每个JavaScript程序也是一个TypeScript程序。 (强调矿山) 现在,您通常不希望基本JavaScript被“不受控制”地使用。毕竟,这是当初创建TypeScript语言的原因之一 然而,一个有效的JavaScript程序在技术上是有效的TypeScript。在规范中,这可能是出于“向后兼容性”的需要,或者更好地说,是出于对ECMAScript的需要
以另一个答案为例,Typescript代码
var testVar = 4;
testVar = "asdf";
将被转换为完全相同的JavaScript代码(使用所有默认编译器选项)
即使存在TypeScript错误,也不会阻止从那里输出有效的javascript。它“编译时出错”。(我希望这被称为警告而不是错误,但无论如何)
另见: 您的JavaScript是TypeScript TypeScript提供编译时类型 JavaScript代码的安全性。鉴于其名称,这并不奇怪。 最棒的是类型是完全可选的。你的 js文件可以重命名为.ts文件和TypeScript 仍将返回与原始版本等效的有效.js JavaScript文件。TypeScript是一个有意且严格的超集 使用可选类型检查的JavaScript
可以停用此行为的最简单选项(输出js,即使存在类型错误)另一个例子
foo=123
在typescript中无效,因为从来没有声明过foo
,也就是说,novar
PS这段代码在严格模式javascript中也会失败。对我来说,上面的javascript代码在typescript文件中工作…有什么建议吗?只有在typescript编译器选项中才是正确的noImplicitAny
为true
。如果它是false
,这是默认情况,那么它就是有效的Typescript。@Tuupertunt不,这不是有效的Typescript,我怀疑它曾经是。错误在于testVar的类型为Number
,因此这与noImplicitAny
无关。事实上,我曾在3.1.6、1.7.5甚至npm上的第一个可用版本0.8.0中尝试过这一点,但他们都没有编译上面的代码。@FINDarkside是否检查编译的js文件?我刚才试过了,虽然有错误,但是生成了js文件。正如你在操场上看到的,它不是有效的typescript(参见testVar
@FINDarkside下面的红线这是TypeScript中的一个错误,但它在技术上仍然是有效的TypeScript,编译器从中输出javascript,这恰好是完全相同的代码。我现在再次尝试,代码与我在操场上的链接完全相同。我使用了tsc myfile.ts代码>,没有任何tsconfig.json。我得到了相同的错误,但我也得到了一个功能性js文件。根据规范。它是按设计工作的。@FINDarkside请检查:您的JavaScript是TypeScript TypeScript为您的JavaScript代码提供了编译时类型安全性。鉴于它的名称,这并不奇怪。这是一件了不起的事情类型是完全可选的。您的JavaScript代码.js文件可以重命名为.ts文件,TypeScript仍然会返回与原始JavaScript文件等效的有效.js。TypeScript是一个有选择性类型检查的JavaScript超集。为了记录在案,我用tsc 3.1.3尝试了这一点,但我t对于任何版本都应该是相同的。@FINDarkside fair point,事实上我在我的问题中添加了一个编辑,提到“noemitError
”wihch更可能是我的观点的正确选项。我将删除对noemplicitany
的提及。