IT-Q

使っているライブラリのインターフェースに、自分のプロパティを足したい。どうしますか。

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
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。