社内の古いライブラリを import したら、「Could not find a declaration file for module」というエラーが出ました。@types も無いようです。どうしますか。
@types が無ければ、.d.ts に declare module "名前" { ... } を書き、使う関数の型だけ宣言します。中身を書かない1行の宣言はエラーを消すだけで、import はすべて any になります。
面接官が見ているのは型定義が無いときに、検査を失わずに型を足せるか。
よくある答えと、面談でどう見られるか
- .d.ts に declare module "ライブラリ名" { ... } を書き、実際に使う関数の型だけを宣言する
その通りです。使う範囲だけでも型を書けば、呼び出し側は検査されます。 - .d.ts に declare module "ライブラリ名"; と1行だけ書く
エラーは消えますが、そのモジュールからの import はすべて any になります。急場しのぎとしては使えますが、検査はされません。 - import の行に // @ts-ignore を付ける
エラーは消えますが、取り込んだものは any のままで、何の検査もされません。 - noImplicitAny を無効にする
このエラーは消えますが、プロジェクト全体で暗黙の any が許されてしまいます。
模範解答
.d.ts に、そのモジュールの型を自分で宣言します。
// types/legacy-lib.d.ts
declare module "legacy-lib" {
export function formatPrice(value: number, currency: string): string
}全部を書く必要はなく、プロジェクトで実際に使っている関数から書けば足ります。宣言した範囲は、呼び出し側で引数の間違いが検査されます。
declare module "legacy-lib"; と中身を書かない形(shorthand)もあり、エラーはすぐ消えますが、公式のリリースノートのとおり、そこからの import はすべて any になります。とりあえず動かすための一時しのぎにとどめ、使う部分から型を足していきます。
対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。
観点をすべて押さえられた場合
自分で書いた型定義と、ライブラリの実際の動きがずれていたら、どうなりますか。どう防ぎますか。一部しか触れられなかった場合
.d.ts ファイルには何が書かれていますか。触れられなかった場合
.d.ts ファイルには何が書かれていますか。