Ce face Omit
Omit<T, "a" | "b"> este T fără proprietățile a și b. Exemplul clasic: datele pentru crearea unui elev sunt Omit<Elev, "id">, pentru că id-ul îl pune baza de date.
Este definit cu Pick și Exclude. Spre deosebire de Pick, cheile din K nu sunt verificate față de T: Omit<Elev, "vârsta"> este acceptat chiar dacă Elev nu are vârsta, deci o greșeală de scriere nu elimină nimic și nu dă eroare.
Pe un union de tipuri, Omit nu se aplică pe fiecare variantă, ci pe proprietățile comune, și poate pierde variantele. Pentru discriminated unions folosește o variantă distributivă: T extends unknown ? Omit<T, K> : never.
Parametri
| Parametru | Descriere |
|---|---|
T |
Tipul obiect de pornire. |
K |
Union cu numele proprietăților eliminate. |
Ce returnează
Un tip obiect cu proprietățile lui T care nu sunt în K.
Exemple
Exemplul 1: Date pentru creare, fără id
interface Elev {
id: number;
nume: string;
oras: string;
}
type ElevNou = Omit<Elev, "id">;
const baza: Elev[] = [];
function adauga(date: ElevNou): Elev {
const elev = { id: baza.length + 1, ...date };
baza.push(elev);
return elev;
}
adauga({ nume: "Ana", oras: "Iași" });
adauga({ nume: "Mihai", oras: "Cluj" });
console.log(baza);
Rezultat
[
{ id: 1, nume: 'Ana', oras: 'Iași' },
{ id: 2, nume: 'Mihai', oras: 'Cluj' }
]
Exemplul 2: Ascunderea datelor sensibile
Funcția scoate parola și la rulare (cu destructurare), iar tipul rezultatului o spune.
interface Utilizator {
email: string;
nume: string;
parola: string;
}
function public_(u: Utilizator): Omit<Utilizator, "parola"> {
const { parola: _, ...rest } = u;
return rest;
}
console.log(public_({ email: "ana@scoala.ro", nume: "Ana", parola: "secret123" }));
Rezultat
{ email: 'ana@scoala.ro', nume: 'Ana' }
Exemplul 3: Proprietatea eliminată nu mai poate fi dată
interface Elev {
id: number;
nume: string;
}
const e: Omit<Elev, "id"> = { id: 5, nume: "Ana" };
console.log(e);
Eroarea afișată de tsc
exemplu.mts(5,31): error TS2353: Object literal may only specify known properties, and 'id' does not exist in type 'Omit<Elev, "id">'.
Greșeli frecvente
- Scrii greșit numele cheii (
Omit<Elev, "Id">). Nu primești eroare și nu se elimină nimic. - Folosești
Omitpe un discriminated union și pierzi discriminantul. Aplică-l distributiv, pe fiecare variantă.
Comenzi înrudite
Pick: Pick<T, K> păstrează din T doar proprietățile cu numele din K.Exclude: Exclude<T, U> elimină din union-ul T variantele care se potrivesc cu U.Partial: Partial<T> face toate proprietățile lui T opționale; util pentru actualizări în care trimiți doar ce se schimbă.keyof: keyof T dă union-ul numelor de proprietăți ale lui T, de exemplu „nume” | „oras”.