web-dev-qa-db-ja.com

タイプスクリプト2.0。 tsconfig.jsonの「タイプ」フィールド

tsconfig.jsontypesフィールドの意味がわかりません。ドキュメントで私はそのようなテキストを読みました:

"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フィールドが必要なのか

42
Stalso

TypeScript 2. *では、「tsconfig.json」には次の2つのプロパティがあります。

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

両方を順番に詳しく説明します。


  1. 'typeRoots'は、トランスパイラーが型定義を探すルートフォルダーを指定します(例: 'node_modules')。

    • TypeScriptを使用している場合、TypeScriptを使用して作成されていないさまざまなライブラリについては、コンパイラがグローバル変数を認識してIntelliSenseをサポートするために定義が必要であることを知っています。

    • この問題は、tsdまたは-などのツールを使用する 'DefinatelyTyped'などのプロジェクト(リポジトリ)で対処されていますtypingsモジュールはプロジェクトに必要なタイピングをダウンロードしますが、独自に「json」ファイルが付属しており、個別にメンテナンスする必要があります。

    • TS2。*では、「npm」を​​使用して定義の依存関係を取得できるようになりました。そのため、tsdまたはtypingsのような個別のcliライブラリを使用する代わりに、今すぐ使用できます:npm i @types/{LIB}この方法で、すべての依存関係はpackage.jsonを使用して管理され、プロジェクトで維持する別の「json」ファイル。


  1. 「タイプ」は、typeRootにある実際のライブラリ名です。

    • 次のようなtypeRootsのデフォルト設定があるとします。

      "typeRoots": [
          "./node_modules/@types"
      ]
      
    • プロジェクトのテストフレームワークとしてジャスミンを使用したいので、typeRootフォルダーが設定されているとしましょう。今やっているのは実行することです:npm i @types/jasmine --save-dev

    • 定義パッケージをインストールしたら、次のように「tsconfig.json」の「types」プロパティを設定するだけです。

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

最後に、基本的にTSコンパイラに次のことを伝えます。

typeRoots:これらのフォルダーで入力を探す必要があります。 types:上記のフォルダーのいずれかに、これらのフレームワーク(サブフォルダー)の定義があります。

上記のシナリオを使用して、別のルートを追加する場合:

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

TSは、次の場所で定義ファイルを探します。

./node_modules/@types/jasmine

または

./custom_definitions/jasmine

お役に立てれば!

98
Vlad Jerca

タイプフィールドは必ずしも必要ではありません。 ドキュメント から注意する重要な部分を次に示します。

デフォルトでは、表示されるすべての「@types」パッケージがコンパイルに含まれます。囲んでいるフォルダーのnode_modules/@ typesにあるパッケージは可視と見なされます

そのため、慣例に従っているか、npmなどのツールセットを使用して@typesパッケージをダウンロードする場合、typeRootsまたはtypesはデフォルトのフォルダー構造ですぐに使用できるため、構成で使用します。

23
Xcalibur