自分で書いた型定義と、ライブラリの実際の動きがずれていたら、どうなりますか。どう防ぎますか。
TypeScript は .d.ts と実装が合っているかを確かめないので、ずれても型チェックは通ります。実装を読んで書き、自信の無い戻り値は unknown にして使う側で確かめます。
面接官が見ているのは手書きの型定義は検査されない「約束」だと分かっているか。
これは「社内の古いライブラリを import したら、「Could not find a declaration file for module」というエラーが出ました。@types も無いようです。どうしますか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- TypeScript は .d.ts と実装が合っているかを確かめないので、ずれても型チェックは通る。実装を読んで書き、自信の無い戻り値は unknown にして使う側で確かめる
その通りです。手書きの型は約束でしかありません。分からないところは広く受けて確かめる方が安全です。 - ずれていれば、TypeScript がエラーで教えてくれる
教えてくれません。.d.ts は実装を見ずに信じられます。 - 実行時に TypeScript が型と違う値を検出して止める
型は実行時に消えます。違う値が来ても、そのまま流れます。 - 細かく正確に書けば、ずれは起きない
書いた時点では合っていても、ライブラリが変われば黙ってずれます。分からない箇所を unknown にしておく方が安全です。
模範解答
TypeScript は、.d.ts に書かれた型と、実際の JavaScript の実装が合っているかを確かめません。書いた型をそのまま信じるので、ずれていても型チェックは通り、実行時に初めて分かります。
防ぎ方は次のとおりです。
・推測で書かず、実装を読んで書く・戻り値の形に自信が無いところは unknown にして、使う側で確かめる・ライブラリを更新したら、手書きの型も見直す・後から @types やライブラリ自身の型が出たら、自分の宣言は消して乗り換える
手書きの型定義は、型アサーションと同じく「自分が保証する」宣言です。
出典(一次資料)
対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。