2015-11-04 78 views
12

我正在考虑转移到Typescript,并且目前正在寻找如果可能逐个文件逐步执行此操作。将JS文件导入到Typescript中

现在,我现在所用的系统是用Webpack构建的,而且我想要继续构建我的整个包。

我有一个.d.ts文件的定义,但我需要我的文件继续导入目前正在抛出一个错误。

/// <reference path="../../../../vendor/src/foo.d.ts" /> 
import foo = require('../../../../vendor/src/foo.js'); 

foo('something'); 

这是目前正在抛出的错误,我也试过没有参考路径,这似乎引发了一个错误,它不是一个模块。目前唯一的方法,我可以没有提出的错误不是导入,只是添加引用,但这意味着webpack将不知道我的文件的位置。

任何想法我已经搜索了很多,但我真的无法将JS文件导入到Typescript中。

回答

1

什么简单地重命名foo.jsfoo.ts(它可能需要一些额外steps但往往能正常工作),然后重写你的代码段:

/// <reference path="../../../../vendor/src/foo.d.ts" /> 

foo('something'); 
+1

这样做的问题是不再需要/导入文件。然后,像Webpack这样的东西不会包含它,除非我可能错过了某些东西,但/// 部分只是用TypeScript来定义变量?谢谢 –

+0

但是如果你把'foo.js'改成'foo.ts',那么webpack应该在构建过程中包含这个文件,不是吗? ''用于statit类型控制,文件依赖树也是基于''注释(TS文件的顺序很重要)。 –

+0

我看到我应该看看谢谢,我已经安装了Atom的打字稿,并且做这样的事情只是简单地引发了一些错误。 –

6

我已搜查任何想法了不少,但我无法真正把JS文件导入到Typescript中。

有关的WebPack所有你需要的是declarerequire功能,并做你已经习惯了:

var foo = require('../../../../vendor/src/foo'); 

require函数类型定义在这里出现:https://github.com/TypeStrong/ts-loader#loading-other-resources-and-code-splitting

如果你想以更强大的方式使用foo ...建议将它移植到.ts以代替奋斗到构建然后维护 a .d.ts文件。

+0

好吧,这就是我所做的,但Typescript只是抛出了一大堆错误,但我可能做了一些奇怪的事情,我会再次尝试这样做,我计划从长远来看将所有东西移植到'.ts'上,但是,我宁愿逐步做,而不是被迫打出依赖关系树,因为在某些文件中foo可能是10个必需文件之一 –

+0

我刚刚尝试了一个快速尝试,现在我得到Typescript抱怨foo被声明了两次尽管只是一个定义文件。 –

+0

'尽管只是一个定义文件两次'定义文件是一个模块吗?如果没有它到全局命名空间并导致重复:https://basarat.gitbooks.io/typescript/content/docs/project/modules.html – basarat