レスポンスの型を 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
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。
一部しか触れられなかった場合
Pick と Omit は、何が違いますか。触れられなかった場合
Pick と Omit は、何が違いますか。