IT-Q

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

標準の Omit は外すキーを keyof any で受けるので、元の型に無いキーでもエラーになりません。綴りを間違えると何も外れません。存在しないキーがエラーになる Pick の方が安全です。

面接官が見ているのはOmit が存在しないキーを受け付けることを知っているか。

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

  • Omit の第2引数は keyof any(どんな文字列でもよい)で、元の型に無いキーでもエラーにならない。外すつもりの password が型に残っている
    その通りです。標準の定義が Omit<T, K extends keyof any> になっています。
  • Omit は大文字と小文字や綴りの違いを吸収する
    吸収しません。綴りが違えば別のキーで、そのキーを外そうとして何も外れていません。
  • TypeScript は文字列のリテラル型を検査しない
    検査します。Pick なら、存在しないキーはエラーになります。
  • strict を有効にすれば、存在しないキーもエラーになる
    strict は関係ありません。Omit の定義がそうなっています。

模範解答

標準の Omit は、次のように定義されています。

  type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>

外すキー K の制約は keyof any、つまり「どんな文字列・数値・シンボルでもよい」で、元の型 T にあるキーかどうかは確かめていません。そのため "pasword" のような綴り間違いでもエラーにならず、何も外れません。結果の型には password が残ったままです。

Pick は K extends keyof T なので、存在しないキーはエラーになります。外に出す型は、出してよいものを Pick で並べる方が、間違いに気づきやすくなります。

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

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

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