2016-10-03 1642 views
20

我不明白tsconfig.json中的types字段的含義。在文件我看了這樣的文字:Typescript 2.0。 tsconfig.json中的「types」字段

 "types": { 
      "description": "Type declaration files to be included in compilation. Requires TypeScript version 2.0 or later.", 
      "type": "array", 
      "items": { 
      "type": "string" 
      } 
     }, 

據,因爲我明白,如果我安裝@types/express我應該在tsconfig.json

{ 
    "compilerOptions": { 
    ... 
    "types": ["lodash"] 
    } 
} 

添加這樣的字符串,但一切正常,沒有它。現在我不明白,爲什麼我需要types

回答

59

由於打字稿2. *了「tsconfig.json」有可用的以下兩個屬性:

{ 
    'typeRoots': [], 
    'types': [] 
} 

我將詳細介紹這兩種秩序。


  1. 'typeRoots' 指定在其中transpiler應該尋找類型定義根文件夾(例如: 'node_modules')。

    • 如果您已經使用打字稿,你知道,那些沒有被使用的打字稿寫不同的庫,你需要定義,以便編譯器識別全局變量,並有智能感知支持。

    • 這個問題已經由項目(回購)如「DefinatelyTyped」使用工具,如TSD分型模塊下載爲您的項目需要分型解決,而且還配備了他們自己的'json'文件需要單獨維護。

    • 使用TS2。*您現在可以使用'npm'獲取定義依賴關係。因此,而不是使用一個單獨的CLI庫像TSD分型,現在你只需使用: npm i @types/{LIB} 這樣,所有的依賴使用的package.json管理,你可以很容易地消除需要另一個'json'文件來維護你的項目。


  • '類型' 是指將在typeRoot找到實際庫名稱。

    • 讓我們說你有typeRoots默認配置它看起來是這樣的:

      "typeRoots": [ 
          "./node_modules/@types" 
      ] 
      
    • 假設您現在想用茉莉花爲您的項目測試框架,讓你擁有您typeRoot文件夾中配置,你有太多現在要做的是執行:安裝定義包npm i @types/jasmine --save-dev

    • 後,你只需要配置喲在 'tsconfig.json' 如下UR '類型' 屬性:

      "types": [ 
          "core-js", 
          "jasmine", 
          "requirejs", 
          "chance" 
      ] 
      

  • 總之,基本上你告訴編譯器TS如下:

    typeRoots:您需要在這些文件夾中查找類型。 類型:在上面提供的其中一個文件夾中,您可以找到這些framworks(子文件夾)的定義。

    所以使用上述情況下,如果我們添加另一個根源:

    "typeRoots": [ 
        "./node_modules/@types", 
        "./custom_definitions" 
    ], 
    "types": [ 
        "jasmine", 
    ] 
    

    TS會查找定義文件中

    ./node_modules/@types/jasmine

    ./custom_definitions/jasmine

    希望這有助於!

    +0

    非常豐富,謝謝!我們是否仍然需要在ts文件的頂部? /// <參考路徑= ... – bedouger

    +0

    如果您選擇使用類型系統,則不會。我個人在我的項目中沒有更多的參考資料。 –

    +0

    你知道爲什麼這不適用於某些類型的時刻或sinon,但爲別人做? – Michael

    12

    您不需要類型字段。這裏是重要組成部分,從documentation注意:

    默認情況下,所有可見的「@types」包包含在你的 編譯。在node_modules包/ @類型的任何封閉的文件夾 被認爲是可見

    所以,如果你遵循慣例或使用的工具集,如故宮下載@types包,不需要配置typeRoots類型,因爲它可以使用默認文件夾結構。

    相關問題