web-dev-qa-db-ja.com

Typescriptの「グローバル宣言」とは何ですか?

「グローバル宣言」とは何ですか?それはどのようにして可能ですか?私はこのコードをLodashタイピングの中に見つけました。問題は、グローバルは名前空間、モジュール、関数、または変数ではないため、これをmy.d.tsファイルに正確に複製しようとすると、許可されないということです。だから問題は、この宣言がTypeScriptでどのように可能かということです。

PSそれでこれを可能にするいくつかの追加のコンパイラオプションがあるかもしれませんか?

declare global {
    interface Set<T> { }
}
10
Hivaga

これはコンパイラの設定には依存しません。 declare globalは、importまたはexportを含むファイル内で使用され、グローバルスコープで宣言します。これは、importまたはexportを含むファイルで必要です。これらのファイルはモジュールと見なされ、モジュールで宣言されたものはすべてモジュールスコープ内にあるためです。

モジュールではない(つまり、import/exportが含まれていない)ファイルでdeclare globalを使用すると、エラーが発生します。これは、そのようなファイルのすべてがグローバルスコープにあるためです。