window に独自のプロパティ(window.appConfig)を足したら、型エラーになりました。どう型を付けますか。
declare global の中で Window インターフェースを宣言し、プロパティを足します。宣言のマージで標準の Window に追加されます。import や export のあるファイルでは、declare global で囲む必要があります。
面接官が見ているのは宣言のマージとグローバル拡張を使えるか。
よくある答えと、面談でどう見られるか
- declare global で Window インターフェースにプロパティを足す(宣言のマージ)
その通りです。interface は同じ名前で宣言すると中身が統合されます。 - (window as any).appConfig と書く
エラーは消えますが、使うたびに検査が外れます。型を一度宣言する方が安全です。 - Window 型をコピーして、プロパティを足した新しい型を作る
既存の window の型は変わりません。新しい型を使うたびに as が要ります。 - tsconfig の strict を外す
strict を外しても、存在しないプロパティへのアクセスはエラーのままです。
模範解答
declare global の中で Window インターフェースを宣言し、プロパティを足します。
declare global {
interface Window {
appConfig: { apiUrl: string }
}
}interface は、同じ名前で宣言すると中身が統合されます(宣言のマージ)。標準の Window に、自分のプロパティが足された形になります。
このファイルがモジュール(import か export を含む)であれば declare global が要ります。公式の Handbook も、モジュールの中からグローバルに宣言を足す方法として説明しています。
対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。
観点をすべて押さえられた場合
使っているライブラリのインターフェースに、自分のプロパティを足したい。どうしますか。一部しか触れられなかった場合
interface を同じ名前で2回宣言すると、どうなりますか。触れられなかった場合
interface を同じ名前で2回宣言すると、どうなりますか。