Operatorul satisfies în TypeScript 4.9+ (Validare fără Pierderea Inferenței) în TypeScript

Ghid complet pentru operatorul satisfies introdus în TypeScript 4.9: validarea conformității cu un tip fără lărgirea tipului (type widening) și păstrarea tipurilor literale specifice.

Sintaxă
const paletaCulori = { primar: '#0070f3', secundar: [0, 112, 243] } satisfies Record<string, string | number[]>;

Înainte de TypeScript 4.9, dezvoltatorii se confruntau mereu cu o dilemă atunci când doreau să verifice că un obiect respectă un anumit tip: fie adnotau explicit variabila cu tipul respectiv (dar pierdeau inferența literală exactă a proprietăților prin type widening), fie renunțau la adnotare pentru a păstra inferența specifică (dar riscau să scape proprietăți invalide sau scrise greșit). Operatorul satisfies rezolvă elegant această problemă.

Problema clasică vs. Soluția cu operatorul satisfies
type Culori = 'rosu' | 'verde' | 'albastru';
type CodCuloare = string | [number, number, number];

// METODA VECHE CU ADNOTARE:
const temaVeche: Record<Culori, CodCuloare> = {
    rosu: '#ff0000',
    verde: [0, 255, 0],
    albastru: '#0000ff'
};
// PROBLEMA: temaVeche.rosu este de tip 'string | [number, number, number]'!
// temaVeche.rosu.toUpperCase(); // EROARE: Proprietatea toUpperCase nu există pe tuplu!

// NOU ÎN TYPESCRIPT 4.9+: OPERATORUL satisfies
const temaNoua = {
    rosu: '#ff0000',
    verde: [0, 255, 0],
    albastru: '#0000ff'
} satisfies Record<Culori, CodCuloare>;

// AVANTAJ URIAȘ:
// 1. Verifică la compilare că toate cheile din Culori sunt prezente și valide!
// 2. Păstrează tipul exact: temaNoua.rosu este inferat ca 'string' (nu union),
//    iar temaNoua.verde este inferat ca [number, number, number]!
console.log(temaNoua.rosu.toUpperCase()); // COMPLET VALID și auto-completat în IDE!

Diferențe Cheie între satisfies, Type Annotation și Type Assertion (as)

Abordare Sintaxă Type Checking Tipul Rezultat
Type Annotation const x: T = ... Complet Lărgit la T (pierde valorile literale concrete).
Type Assertion const x = ... as T Periculos (forțează compilatorul să accepte forma). Forțat la T (poate ascunde proprietăți lipsă sau erori la runtime).
Operatorul satisfies const x = ... satisfies T Complet și riguros Păstrează cel mai specific tip inferat posibil, garantând că respectă T.
Detectarea proprietăților scrise greșit cu satisfies
type RuteAplicatie = Record<string, { cale: string; necesitaAutentificare: boolean }>;

const rute = {
    acasa: { cale: '/', necesitaAutentificare: false },
    profil: { cale: '/profil', necesitaAutentificare: true },
    // Eroare prinsă instantaneu: proprietate necunoscută 'necesitaAuth'
    setari: { cale: '/setari', necesitaAuth: true }
} satisfies RuteAplicatie;
// Type error: Object literal may only specify known properties, and 'necesitaAuth' does not exist in type '{ cale: string; necesitaAutentificare: boolean; }'.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Operatorul satisfies în TypeScript 4.9+ (Validare fără Pierderea Inferenței)

Ai o nelămurire despre utilizarea comenzii Operatorul satisfies în TypeScript 4.9+ (Validare fără Pierderea Inferenței) sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.