Gis*_*way 124 javascript typescript
现在TypeScript问世了,对我来说这是一个令人兴奋的消息,但是如何将所有现有的JavaScript文件转换为TypeScript.
lhk*_*lhk 100
我担心这会很成问题.TypeScript是JavaScript的超集.这意味着所有有效的JavaScript代码也是有效的TypeScript代码.这是错的.以下代码在JavaScript中是正确的,但在TypeScript中创建错误:
var data={x:5, y:6};
data.z=5;
Run Code Online (Sandbox Code Playgroud)
您可以通过将数据声明为"环境"来获取JavaScript的动态行为
var data:any={x:5, y:6};
data.z=5;
Run Code Online (Sandbox Code Playgroud)
现在这也适用于TypeScript.不过,您可以将.js文件的扩展名更改为.ts,并将此文件传递给TypeScript编译器.这让我很困惑,我在freenode上的TypeScript IRC频道中提出了这个问题.事实证明,Typescript编译器检查其输入是否有效,并且在发现某些内容时不会做任何事情.直观地说这听起来不错.您应该能够通过更新文件扩展名将所有JavaScript"转换"为Typescript并且很好.不幸的是,这不能按预期工作.我们假设你有这个代码:
var func=function(n){alert(n)};
var data={x:5};
data.z=6;
Run Code Online (Sandbox Code Playgroud)
编辑:我刚刚尝试编译它,它不起作用.对不起,我好像错了:TypeScript编译器甚至不接受纯JavaScript.我会试着找出问题所在.
您已将文件扩展名更改为.ts,并在其他代码中使用函数func.起初一切似乎都很好,但随后出现了一个丑陋的虫子.您决定某些静态类型检查可能会对您有所帮助,您将代码更改为:
var func=function(n:string){alert(n)};
var data={x:5};
data.z=6;
Run Code Online (Sandbox Code Playgroud)
但现在这不再是有效的JavaScript代码,会导致编译器生成大量错误消息.在所有数据都没有成员"z"之后....如果默认类型总是"任何",则可以避免此行为,但类型推断将完全无用.
那你怎么解决这个问题呢? 答案是:声明文件.您可以在项目中"按原样"使用JavaScript代码,并在几个.d.ts文件的帮助下仍然可以进行静态类型检查.它们通知编译器在JavaScript文件中声明了哪些变量,方法和"类",包括它们的类型.因此,它们允许编译时类型检查和梦幻般的智能感知.我的例子的.d.ts文件就是
declare var data:any;
declare function func(n:string);
Run Code Online (Sandbox Code Playgroud)
将其保存为"myjsfile.d.ts"并将其导入到typescript中
///<reference path="myjsfile.d.ts"/>
Run Code Online (Sandbox Code Playgroud)
一定要在编译的打字稿上面的html文件中包含JavaScript脚本.这是一个有趣的链接.您可能对"将JavaScript转换为TypeScript"部分感兴趣.
归档时间: |
|
查看次数: |
156162 次 |
最近记录: |