2016-06-07 65 views
1

我有一個可以工作的ES2015項目,我想遷移到TypeScript。TypeScript:導入沒有類型定義的ES2015模塊

在我的解決方案我使用ES2015進口導入3-pary模塊(通過NPM安裝)是這樣的:

import {ClassXY} from 'moduleXY' 

在我的項目設置打字稿後,打字稿編譯器報告以下錯誤:

error TS2307: Cannot find module 'moduleXY' 

我怎樣才能得到在TypeScript中工作的上述ES2015導入語句?

我找比通過typings安裝相應的.d.ts聲明以外的解決方案......我們假設模塊moduleXY是不分配自己的.d.ts聲明,也沒有聲明中使用,在DefinitelyTyped(或聲明庫已過時)。

我必須爲模塊moduleXY的類型定義創建存根嗎?我將如何以最小的努力做到這一點?

回答

2

如果沒有分型的模塊,那麼你可以 require它像一個普通的CommonJS的模塊

declare require:any; 

const moduleXY:{ 
    classXY:any 
} = require("moduleXY"); 

中的.ts文件,並確保該文件中包含了打字稿編譯器源。您不需要完全聲明該模塊,並且在開始添加向前移動類型的位置仍然可以獲益。

+0

如果您使用模塊加載器/打包器,這是否會執行任何操作以確保給定模塊實際上被加載? – StriplingWarrior

+0

@StriplingWarrior遺憾的不是,但如果你使用WebPack和ts-loader,你可以使用require而不是import來加載模塊 – Tadwork

+0

這似乎不工作......我得到一個編譯錯誤:''{'expected'。 ..所以我認爲聲明的聲明應該是'declare module'react-redux'{};'...這樣擺脫了最初的編譯錯誤('Can not find module ...')...但是TS仍然無法解決從'moduleXY'導入{ClassXY};'...由此產生的錯誤是現在'模塊「moduleXY」沒有導出成員'ClassXY'' – jbandi