Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
任何JavaScript代码都是有效的TypeScript代码吗?_Javascript_Typescript - Fatal编程技术网

任何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
,也就是说,no
var
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
的提及。