Kształty obiektów
Omit
Usuwa wymienione klucze — i w odróżnieniu od Pick nie dba o to, czy w ogóle istniały.
Czym jest
Nie jest prymitywem: Omit to Pick<T, Exclude<keyof T, K>>, co definicja obok pokazuje wprost. Ograniczeniem jest keyof any, a nie keyof T, i ta jedna różnica odpowiada za większość błędów z udziałem tego typu.
Przykłady
Omit<{ a: string; b: number }, 'b'>→{ a: string; }Omit<{ a: string }, 'typo'>→{ a: string; }Żadnego błędu, żadnego skutku. Źle wpisany klucz po cichu nic nie usuwa, a typ nadal wygląda dobrze.
Omit<{ a: string; b: number; c: boolean }, 'a' | 'b'>→{ c: boolean; }
Każdy rozwinięty typ powyżej wypisał TypeScript 6.0.3, nie ręka człowieka.
Czego nie robi
- Nie sprawdza przekazywanych kluczy.
Omit<User, "nmae">kompiluje się, nic nie usuwa i jest najczęstszym cichym błędem w bazach kodu TypeScriptu. - Nie dystrybuuje się po uniach, więc usuwanie z
A | Bnajpierw zapada się do wspólnych kluczy, a dopiero potem cokolwiek usuwa.
Wniosek
Jeśli chcesz łapać literówki, napisz własne: type StrictOmit<T, K extends keyof T> = Omit<T, K>. Całą naprawą jest ograniczenie.

