web-dev-qa-db-ja.com

グローバルおよびアンビエント依存関係-タイピング

私はアンビエントとグローバルの依存関係の間で本当に混乱しています。グローバルな依存関係の概念を理解しました。つまり、依存関係をグローバルにインストールするということです。しかし、アンビエントの依存関係については、それが何であるかがわかりませんでした。最近、タイピングで アンビエントはグローバルになりました と宣言されました。私は完全に迷子になっています。

誰かが私がこの混乱を取り除くのを手伝ってくれませんか。

まず、少し安心してください。アンビエント型とグローバル型は同じものです。globalがそれらの機能をより適切に説明しているため、名前を変更するだけです。

彼らが何であるかについて....

最も単純な定義を使用するグローバル宣言は、プロジェクトのグローバル名前空間で使用可能な型指定です。

「外部モジュール」は、トップレベルのインポートまたはエクスポートを含む.d.tsファイルです。外部モジュールは、declare module '....'の入力でラップされ、依存関係の魔法の後で、プロジェクトのグローバル名前空間を汚染しない宣言になります。

それが重要である理由については、バージョンとの競合や重複した定義に遭遇する可能性があります。

パッケージAは依存関係Xのバージョン1.4に依存しますパッケージBは依存関係Xのバージョン2.0に依存します

パッケージAとパッケージBの定義が両方ともグローバルである場合、そのバージョンの競合(同じ依存関係の異なる定義)はグローバル名前空間で終了し、TypeScriptコンパイラーが爆発します。

それはすべて、タイプ宣言をどのスコープで使用できるようにするかによって決まります。

11
Joshua Wiens