2016-11-28 300 views
0

在我的打字稿項目中,我使用:如何將require轉換爲第三方庫的import語句?

const program = require('commander'); 
const figlet = require('figlet'); 
const AWS = require('aws-sdk'); 

,我想重構這些線路通過import工作中,而不是堅持以tslint的no-var-requires規則。然而,它應該如此工作的方式無法解決我的問題。

對於figlet,我都嘗試:

但然後我得到:

bin/console.ts(1,20): error TS2307: Cannot find module 'figlet'. 

我怎麼想導入這些庫?

回答

1

的關鍵是打字稿必須能夠找到你指的模塊,所以可以鍵入檢查它的用法。在沒有更多信息的情況下,很難知道如何在項目中做到這一點,但一般來說,答案是爲您感興趣的JavaScript庫安裝類型定義。

最簡單的方法來做到這一點,如果你沒有基礎設施通常是npm。對於AWS-SDK例如,如果運行npm install --save @types/aws-sdk那麼該類型的定義將被下載到node_modules/@types/aws-sdk項目內部,打字稿編譯器會自動發現他們那裏,所以如果你導入AWS-SDK,它會知道是怎麼回事。

同樣會爲指揮官工作了。雖然Figlet似乎沒有任何已發佈的聲明文件,因此您必須將自己的聲明放在一起。您可以實際上描述的類型,或明確給模塊any類型:

  • 描述的類型比較複雜,但一個好的方式來理解這一切是如何工作。嘗試閱讀手冊中的type declarations section。看看其他現有的類型定義(其中大部分都在DefinitelyTyped回購)是掌握這一點的另一個好方法。

  • 顯式給它any類型並忽略問題會容易得多,但在使用figlet時不會得到任何類型系統支持。有一個簡短的說明,但是:在您的項目中創建一個figlet.d.ts文件,並在其中只需放入declare module "figlet";。這是一個shorthand ambient module,應該足以讓你成功導入figlet。

您可以在手冊看看consuming declaration filesmodule resolution generally的更多細節。

相關問題