Formas de objeto
Omit
Descarta las claves nombradas — y, a diferencia de `Pick`, no le importa si alguna vez estuvieron.
Qué es
No es una primitiva: `Omit` es `Pick<T, Exclude<keyof T, K>>`, como muestra sin rodeos la definición de al lado. La restricción es `keyof any`, no `keyof T`, y esa única diferencia causa la mayoría de los errores en los que participa este tipo.
Ejemplos
Omit<{ a: string; b: number }, 'b'>→{ a: string; }Omit<{ a: string }, 'typo'>→{ a: string; }Sin error y sin efecto. Una clave mal escrita no omite nada en silencio, y el tipo sigue pareciendo correcto.
Omit<{ a: string; b: number; c: boolean }, 'a' | 'b'>→{ c: boolean; }
Cada tipo resuelto de arriba lo imprimió TypeScript 5.9.3, no se escribió a mano.
Lo que no hace
- No comprueba las claves que le pasas. `Omit<User, "nmae">` compila, no quita nada, y es el error silencioso más común en bases de código TypeScript.
- No distribuye sobre uniones, así que omitir de `A | B` colapsa primero a las claves compartidas y solo después quita algo.
Conclusión
Si quieres que la errata se detecte, escribe el tuyo: `type StrictOmit<T, K extends keyof T> = Omit<T, K>`. La restricción es todo el arreglo.