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