Ce face intersection (&)
Un intersection, scris cu &, cere ca valoarea să fie în același timp de toate tipurile. Pentru obiecte, înseamnă că are proprietățile tuturor: Persoana & Contact are și nume, și email. Este felul în care aliasurile type „moștenesc”, echivalentul lui extends de la interfețe.
Este util când compui tipuri din bucăți mici refolosibile (CuId & CuData & Produs) sau când o funcție adaugă proprietăți unui obiect primit (T & { id: number }).
Dacă tipurile au aceeași proprietate cu tipuri incompatibile ({ id: number } & { id: string }), proprietatea devine never și niciun obiect nu se mai potrivește. Intersecția a două primitive diferite (string & number) este direct never.
Exemple
Exemplul 1: Tip compus din bucăți
type CuId = { id: number };
type CuData = { creatLa: string };
type Produs = { nume: string; pret: number };
type ProdusSalvat = CuId & CuData & Produs;
const p: ProdusSalvat = { id: 7, creatLa: "2026-10-19", nume: "Brânză de vaci", pret: 18.5 };
console.log(`#${p.id} ${p.nume}: ${p.pret} lei (adăugat ${p.creatLa})`);
Rezultat
#7 Brânză de vaci: 18.5 lei (adăugat 2026-10-19)
Exemplul 2: Funcție care adaugă o proprietate
Rezultatul are toate proprietățile obiectului primit plus id.
let urmatorulId = 1;
function cuId<T extends object>(obiect: T): T & { id: number } {
return { ...obiect, id: urmatorulId++ };
}
const elev = cuId({ nume: "Ana", oras: "Iași" });
const oras = cuId({ nume: "Cluj", judet: "Cluj" });
console.log(elev.id, elev.nume, elev.oras);
console.log(oras.id, oras.judet);
Rezultat
1 Ana Iași
2 Cluj
Exemplul 3: Proprietate care lipsește din combinație
type Persoana = { nume: string };
type Contact = { email: string };
const c: Persoana & Contact = { nume: "Ana" };
console.log(c);
Eroarea afișată de tsc
exemplu.mts(3,7): error TS2322: Type '{ nume: string; }' is not assignable to type 'Persoana & Contact'.
Property 'email' is missing in type '{ nume: string; }' but required in type 'Contact'.
Greșeli frecvente
- Confunzi
&cu|.A | Beste „una dintre ele” (mai puține garanții),A & Beste „amândouă” (mai multe proprietăți). - Combini tipuri cu proprietăți conflictuale și obții
neverfără nicio eroare la declarare. Cuinterface extendsconflictul ar fi semnalat.
Comenzi înrudite
union (|): Un tip care acceptă valori din mai multe tipuri: A | B înseamnă fie A, fie B.type (alias de tip): Dă un nume oricărui tip: obiect, union, tuple, funcție sau un tip calculat din alte tipuri.interface vs type: Când alegi interface și când type: pentru obiecte sunt aproape echivalente, dar au câteva diferențe importante.generics (<T>): Parametri de tip: o funcție sau clasă scrisă o dată, care funcționează cu orice tip și păstrează tipul exact.