有没有工具将JavaScript文件转换为TypeScript

现在TypeScript出来了,这对我来说是一个令人兴奋的消息,但是我怎样才能将所有现有的JavaScript文件转换成TypeScript。

我担心这将是非常有问题的。 TypeScript是JavaScript的超集 。 这意味着所有有效的JavaScript代码也是有效的TypeScript代码。 这是错误的。 以下代码在JavaScript中是正确的,但在TypeScript中创build一个错误:

var data={x:5, y:6}; data.z=5; 

您可以通过将数据声明为“环境”来获得JavaScript的dynamic行为

 var data:any={x:5, y:6}; data.z=5; 

现在这个也可以在TypeScript中使用。 不过,您可以将.js文件的扩展名更改为.ts,并将此文件传递给TypeScript编译器。 这真让我困惑,我在freenode的TypeScript IRC频道问了这个问题。 事实certificate,Typescript编译器检查其有效的JavaScriptinput,只是不会做任何事情,如果它发现的东西。 直觉上这听起来不错。 你应该能够通过更新文件扩展名来“转换”所有的JavaScript到打字稿,并且很好。 不幸的是,这不能按预期工作。 假设你有这个代码:

 var func=function(n){alert(n)}; var data={x:5}; data.z=6; 

编辑:我只是试图编译这个,它不工作。 对不起,我似乎错了:TypeScript编译器甚至不接受纯粹的JavaScript。 我会试着找出哪里出了问题。

您已将文件扩展名更改为.ts,并在其他代码中使用函数func。 起初,一切似乎都很好,但随后一个丑陋的bug出现了。 你决定一些静态types检查可能会帮助你,你改变代码:

 var func=function(n:string){alert(n)}; var data={x:5}; data.z=6; 

但是,现在这不再是有效的JavaScript代码,并会导致编译器生成大量的错误消息。 毕竟数据没有成员“z”。 …如果默认types总是“any”,但是这种types推断完全没用,这种行为是可以避免的。

那么你如何解决这个问题呢? 答案是:声明文件。 您可以在项目中“按原样”使用您的JavaScript代码,并在几个.d.ts文件的帮助下仍然可以进行静态types检查。 他们通知编译器在JavaScript文件中声明了哪些variables,方法和“类”,包括它们的types。 因此它们允许编译时types检查和神奇的智能感知。 我的例子.d.ts文件将是

 declare var data:any; declare function func(n:string); 

将其保存为“myjsfile.d.ts”并将其导入到打字稿中

 ///<reference path="myjsfile.d.ts"/> 

请务必在编译后的打字稿上面的html文件中包含JavaScript脚本。 这是一个有趣的链接 。 您可能对“将JavaScript转换为TypeScript”部分感兴趣。

更新: 在这篇文章中详细介绍了工具

从版本9( EAP builds available )开始的ReSharper具有自动将JavaScript代码转换为TypeScript的function。 您可以从.js文件重命名为.ts,并看到这样的R#build议:

没有尝试过现实世界的例子。 但它能够转换大量的JavaScript模式。

从terminal(mac):

 for f in *.js; do mv $f `basename $f .js`.ts; done; 

将所有.js文件重命名为.ts

这有点儿尴尬 – 但正如Benjamin指出的那样, JavaScript文件是有效的TypeScript 。 如果你想添加types,类,接口等到你的JavaScript – 你自己需要使用这些概念devise和改变你的代码 – 很less/没有自动转换。

使用GNU findutils(大多数* nixes)+ Bash,只需要:

 find -type f -name '*.js' -exec bash -c 'mv "${1}" "${1%???}.ts"' bash {} \;