是否有工具将JavaScript文件转换为TypeScript

时间:2013-01-19 07:30:46

标签: typescript javascript

现在TypeScript问世了,对我来说这是一个令人兴奋的消息,但我如何将所有现有的JavaScript文件转换为TypeScript。

3 个答案:

答案 0 :(得分:92)

我担心这会很成问题。 TypeScript is a superset of 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“转换”为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”之后。 ... 如果默认类型总是“任何”,则可以避免这种行为,但是类型推断将完全没用。

那么你如何解决这个问题呢? 答案是:声明文件。 您可以在项目中“按原样”使用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脚本。 这是一个interesting link。您可能对“将JavaScript转换为TypeScript”部分感兴趣。

答案 1 :(得分:48)

更新:Tool is described in details in this post

从版本9开始的ReSharper(EAP builds available)具有自动将JavaScript代码转换为TypeScript的功能。您可以将.js文件重命名为.ts并查看R#建议,如下所示:

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

答案 2 :(得分:2)

从终端(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 {} \;