现在TypeScript出来了,这对我来说是一个令人振奋的消息,但是如何将所有现有的JavaScript文件转换为TypeScript。
现在TypeScript出来了,这对我来说是一个令人振奋的消息,但是如何将所有现有的JavaScript文件转换为TypeScript。
Answers:
我担心这会很成问题。TypeScript是JavaScript的超集。这意味着所有有效的JavaScript代码也是有效的TypeScript代码。这是错误的。以下代码在JavaScript中是正确的,但在TypeScript中会产生错误:
var data={x:5, y:6};
data.z=5;
您可以通过将数据声明为“环境”来获得JavaScript的动态行为
var data:any={x:5, y:6};
data.z=5;
现在,这也可以在TypeScript中使用。不过,您可以将.js文件的扩展名更改为.ts,然后将此文件传递给TypeScript编译器。这真的让我感到困惑,我在freenode上的TypeScript IRC频道中问了这个问题。事实证明,Typescript编译器会检查其输入中是否包含有效的JavaScript,并且在发现某些内容时不会执行任何操作。直观上来说,这听起来不错。您只需要更新文件扩展名就应该能够将所有JavaScript都“转换”为Typescript,并且一切顺利。不幸的是,这不能按预期工作。假设您有以下代码:
var func=function(n){alert(n)};
var data={x:5};
data.z=6;
编辑:我只是试图编译它,它不起作用。对不起,我似乎误会了:TypeScript编译器甚至不接受纯JavaScript。我将尝试找出问题所在。
您已将文件扩展名更改为.ts,并在其他代码中使用了func函数。起初一切似乎都很好,但随后出现了一个丑陋的错误。您认为某些静态类型检查可能会为您提供帮助,然后将代码更改为:
var func=function(n:string){alert(n)};
var data={x:5};
data.z=6;
但是现在这不再是有效的JavaScript代码,它将导致编译器生成许多错误消息。毕竟所有数据都没有成员“ z”。...如果默认类型始终为“ any”,则可以避免这种行为,但是类型推断将毫无用处。
那么您如何解决这个问题呢? 答案是:声明文件。您可以在项目中“按原样”使用JavaScript代码,并借助一些.d.ts文件进行静态类型检查。它们通知编译器在JavaScript文件中声明了哪些变量,方法和“类”,包括它们的类型。因此,它们允许进行编译时类型检查和出色的智能感知。我的示例的.d.ts文件是
declare var data:any;
declare function func(n:string);
将其另存为“ myjsfile.d.ts”,然后将其导入到打字稿中
///<reference path="myjsfile.d.ts"/>
确保在已编译的打字稿上方的html文件中包含JavaScript脚本。这是一个有趣的链接。您可能对“将JavaScript转换为TypeScript”一节感兴趣。
noEmitOnError关闭,它仍然可以操作并发出其翻译。因此,尽管它显示了错误(令人不安),但实际上您可以忽略这些错误并使用TypeScript转译(例如,允许从JS逐渐过渡到TS)。同样,至少某些错误可以通过类似的开关禁用noImplicitAny(也许全部通过IDK)。
从终端(mac):
for f in *.js; do mv $f `basename $f .js`.ts; done;
将所有.js文件重命名为.ts
这有点可笑,但正如本杰明指出的,上述JavaScript文件是有效的TypeScript。如果要向JavaScript添加类型,类,接口等-您将需要使用这些概念来设计和更改代码 -几乎没有/没有自动转换。
使用GNU findutils(大多数* nixes)+ Bash,只需执行以下操作:
find -type f -name '*.js' -exec bash -c 'mv "${1}" "${1%???}.ts"' bash {} \;
var a = 5; a = "";