2015-11-04 81 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