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
フィールドが必要なのか
TypeScript 2. *では、「tsconfig.json」には次の2つのプロパティがあります。
{
'typeRoots': [],
'types': []
}
両方を順番に詳しく説明します。
'typeRoots'は、トランスパイラーが型定義を探すルートフォルダーを指定します(例: 'node_modules')。
TypeScriptを使用している場合、TypeScriptを使用して作成されていないさまざまなライブラリについては、コンパイラがグローバル変数を認識してIntelliSenseをサポートするために定義が必要であることを知っています。
この問題は、tsdまたは-などのツールを使用する 'DefinatelyTyped'などのプロジェクト(リポジトリ)で対処されていますtypingsモジュールはプロジェクトに必要なタイピングをダウンロードしますが、独自に「json」ファイルが付属しており、個別にメンテナンスする必要があります。
TS2。*では、「npm」を使用して定義の依存関係を取得できるようになりました。そのため、tsdまたはtypingsのような個別のcliライブラリを使用する代わりに、今すぐ使用できます:npm i @types/{LIB}
この方法で、すべての依存関係はpackage.jsonを使用して管理され、プロジェクトで維持する別の「json」ファイル。
「タイプ」は、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
お役に立てれば!
タイプフィールドは必ずしも必要ではありません。 ドキュメント から注意する重要な部分を次に示します。
デフォルトでは、表示されるすべての「@types」パッケージがコンパイルに含まれます。囲んでいるフォルダーのnode_modules/@ typesにあるパッケージは可視と見なされます
そのため、慣例に従っているか、npmなどのツールセットを使用して@typesパッケージをダウンロードする場合、typeRootsまたはtypesはデフォルトのフォルダー構造ですぐに使用できるため、構成で使用します。