質問:
多くの異なるファイルで多くのタイプを再利用するプロジェクトは、スクリプト ファイルで定義されたタイプを利用できます。これらのタイプはプロジェクト全体でグローバルに表示され、インポートする必要はありません。公式ハンドブックを参照してください:
import
TypeScript では、ECMAScript 2015 と同様に、トップレベルのorを含むすべてのファイルがexport
モジュールと見なされます。import
逆に、トップレベルまたは宣言のないファイルexport
は、コンテンツがグローバル スコープで (したがってモジュールでも) 利用可能なスクリプトとして扱われます。
私は自分のプロジェクトでこれらのグローバル型を使用しましたが、うまく機能しました。しかし、その後、プロジェクトを NPM モジュールに変えることにしました。そのモジュールの「グローバル」タイプは、モジュール自体に対してのみ表示される必要があります。
<reference/>
最初に、 s と.を追加せずに、モジュールをそのまま公開しましたtypeRoots
。ただし、モジュールを別のプロジェクトにインポートすると、TypeScript はグローバル型を見つけることができず、コンパイルできませんでした。
次に、グローバル型を使用するモジュール内のすべてのファイルに追加<reference path="types.ts" />
してから、もう一度プッシュしました。驚いたことに、これにより、モジュールだけでなく、それを使用するプロジェクト全体でも型が使用可能になり、ローカル型とモジュールの型の間で競合が発生しました。
(私が公開したモジュールの両方のバージョンは、それ自体で完全にコンパイル可能であったことに注意してください。問題はnpm i
、別のプロジェクトで使用してモジュールをインストールしたときに始まりました。)
モジュールの「グローバル」タイプをモジュールでのみ使用できるようにする方法はありますか?
私のモジュールの構造:
.
├── dist
│ ├── index.d.ts
│ ├── index.js
│ ├── foo.d.ts
│ ├── foo.js
│ ├── types.d.ts
│ └── types.js
├── package.json
├── src
│ ├── index.ts ← contains import/export
│ ├── foo.ts ← contains import/export
│ └── types.ts ← contains only types, no import/export
└── tsconfig.json
最初の公開では、index.ts
通常foo.ts
のコードのみが含まれていたため、プロジェクト時に型が認識されませんでした。モジュールを 2 回目に公開したときに、と の///<reference path="types.ts"/>
両方に追加しindex.ts
ましたfoo.ts
。これはpath="types.d.ts"
、コンパイルされたファイルindex.d.ts
とfoo.d.ts
.
パッケージ.json:
{
"name": "@foo/foo",
"version": "1.0.0",
"main": "dist/index.js"
}
tsconfig.json:
{
"include": ["./src"],
"compilerOptions": {
"moduleResolution": "classic",
"outDir": "./dist",
"module": "commonjs",
"declaration": true
}
}