IT-Q

API の応答に型を付けるとき、どう書きますか。

unknown で受けて、実行時に形を確かめてから型を付けます。res.json() を await した値は any なので、User 型の変数に入れても as User と書いても、何も確かめていません。

面接官が見ているのは型を付けることと、確かめることを区別できるか。

これは「参画したプロジェクトで、any が数百か所に使われていました。どう進めますか。」への追撃質問です。

よくある答えと、面談でどう見られるか

  • unknown で受けて、実行時に形を検査してから型を付ける
    その通りです。検査を通ったものだけが、その型として扱われます。
  • await res.json() as User と書く
    確かめていません。API が違う形を返しても、そのまま User として扱われます。
  • await res.json() の結果を User 型の変数に代入する
    await した res.json() の結果は any なので、何でも代入できてしまいます。as と同じく確かめていません。
  • API 側も TypeScript なので、型を共有すれば検査は要らない
    型を共有するのは有効ですが、デプロイの時期がずれれば形はずれます。境界では確かめます。

模範解答

unknown で受けて、実行時に形を検査してから型を付けます。

res.json() の戻り値は、標準の型定義では Promise<any> で、await した値は any です。そのため User 型の変数に代入しても、as User と書いても、何も確かめていません。API が項目名を変えたり null を返したりしても、TypeScript は何も言わず、ずっと先の処理で落ちます。

検査は、自分で型ガード関数(value is User を返す関数)を書くか、検証用のライブラリでスキーマを定義して行います。検査を通ったものだけを User として扱えば、その先は型を信用できます。

対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。

ここからどう深掘りされるか

この問いに答えられた場合、面談は次の質問に進みます。