使っているライブラリのインターフェースに、自分のプロパティを足したい。どうしますか。
declare module "ライブラリ名" の中で、同じ名前のインターフェースを宣言して中身を足します。新しいトップレベルの宣言は足せず、default export は拡張できない、という制約があります。
面接官が見ているのはモジュール拡張(module augmentation)を知っているか。制約まで言えるか。
これは「window に独自のプロパティ(window.appConfig)を足したら、型エラーになりました。どう型を付けますか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- declare module "ライブラリ名" の中で、同じ名前のインターフェースを宣言して足す
その通りです。モジュール拡張と呼ばれます。足せるのは既存の宣言への追記だけです。 - node_modules の中の型定義ファイルを直接書き換える
インストールし直すと消えます。チームの他の人の環境にも反映されません。 - ライブラリを fork して型定義を直す
根本的ですが、更新に追随する手間が大きくなります。足すだけならモジュール拡張で足ります。 - ライブラリの型は変更できないので、別の型を作って as で変換する
変更できます。as で変換するたびに検査が外れるので、拡張する方が安全です。
模範解答
declare module "ライブラリ名" の中で、拡張したいインターフェースを同じ名前で宣言します。モジュール拡張(module augmentation)と呼ばれ、宣言のマージで中身が足されます。
公式が挙げている制約が2つあります。1つ目は、新しいトップレベルの宣言は足せず、既存の宣言への追記だけであること。2つ目は、default export は拡張できず、名前付きの export だけであることです。
node_modules の型定義を直接書き換えると、インストールし直したときに消えます。拡張は自分のリポジトリに置くので、チーム全員に反映されます。
出典(一次資料)
対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。