IT-Q

綴りを直して Omit<User, "password"> にしました。これで、API のレスポンスから password は消えましたか。

消えません。型は実行時に消えるので、User のオブジェクトをそのまま返せば password も JSON に入ります。返す項目はコードで明示的に詰め直します。型で外すのとデータから外すのは別です。

面接官が見ているのは🔴 型が実行時のデータを変えないことを、情報漏れの文脈で理解しているか。

これは「レスポンスの型を Omit<User, "pasword"> と書いていました(綴りの間違い)。それでもエラーになりませんでした。なぜですか。」への追撃質問です。

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

  • 消えていない。型は実行時に消えるので、返す値から password を取り除くコードが要る。返す項目を明示的に詰め直す
    その通りです。型を変えただけでは、送られるデータは1バイトも変わりません。
  • 消えた。型に無いプロパティは JSON にしたときに出力されない
    出力されます。JSON.stringify は実行時の値をそのまま書き出し、型は見ていません。
  • 消えていないが、型が付いているので画面には出ないから問題ない
    レスポンスに含まれていれば、ブラウザの開発者ツールで誰でも読めます。
  • TypeScript がコンパイル時に、そのプロパティを削除するコードを足す
    足しません。TypeScript は型のためのコードを生成しません。

模範解答

消えていません。

型は実行時には消えるので、Omit<User, "password"> と書いても、返している値が User のオブジェクトそのものなら、password はそのまま JSON に入って送られます。ブラウザの開発者ツールを開けば、誰でも読めます。

しかも、構造的部分型のため、password を持つ User の値は、password を持たない型にそのまま代入できてしまいます。型チェックでも気づけません。

返す項目は、コードで明示的に詰め直します。

  return { id: user.id, name: user.name }

型で外すことと、データから外すことは別です。漏れてはいけないものほど、実際の値で外します。

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