as (type assertion) în TypeScript

Îi spui compilatorului ce tip are o valoare, când știi mai mult decât el; nu face nicio conversie la rulare.

Sintaxă
const x = valoare as Tip;
const y = <Tip>valoare;        // formă veche, nu merge în .tsx

Ce face as (type assertion)

valoare as Tip este o aserțiune de tip: îi spui lui TypeScript „tratează valoarea ca fiind de tipul acesta”. Nu se face nicio verificare și nicio conversie la rulare; în JavaScript-ul generat, as Tip pur și simplu dispare. Dacă te înșeli, eroarea apare mai târziu, la rulare.

Se folosește când tu știi mai mult decât compilatorul: elementul din pagină cu id-ul #email este sigur un HTMLInputElement, datele dintr-un fișier au o anumită formă, o eroare din catch este sigur Error. tsc permite as doar între tipuri înrudite (unul este inclus în celălalt). Pentru tipuri fără legătură trebuie trecut prin unknown: x as unknown as Tip, semn clar că faci ceva riscant.

Alternative mai sigure: un type guard care chiar verifică, satisfies pentru a verifica un obiect fără să-i schimbi tipul, sau o adnotare (const x: Tip = ...), care verifică proprietățile. Pentru as const vezi pagina separată.

Exemple

Exemplul 1: Date dintr-un fișier JSON

JSON.parse returnează any. Cu as spui ce formă au datele; dacă datele sunt greșite, nu te avertizează nimeni.

interface Elev {
    nume: string;
    note: number[];
}

const text = '{"nume": "Ana", "note": [9, 10]}';
const elev = JSON.parse(text) as Elev;
console.log(elev.nume, elev.note.length);

const gresit = JSON.parse('{"name": "Mihai"}') as Elev;
console.log(gresit.nume);          // undefined: as nu a verificat nimic

Rezultat

Ana 2
undefined

Exemplul 2: as nu convertește

Valoarea rămâne text și la rulare. Pentru conversie folosești Number().

const intrare: unknown = "42";
const fals = intrare as number;          // compilatorul crede că este number
console.log(typeof fals, fals === 42);

const corect = Number(intrare);
console.log(typeof corect, corect === 42);

Rezultat

string false
number true

Exemplul 3: Tipuri fără legătură

const x = "Ana" as number;
console.log(x);

Eroarea afișată de tsc

exemplu.mts(1,11): error TS2352: Conversion of type 'string' to type 'number' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.

Greșeli frecvente

  • Folosești as ca să scapi de orice eroare. Fiecare as este un loc unde verificarea este oprită; caută întâi un type guard.
  • Scrii {} as Elev ca să creezi un obiect gol. Proprietățile lipsesc la rulare; construiește obiectul complet sau folosește Partial<Elev>.

Comenzi înrudite

  • as const: Face un literal complet readonly și păstrează valorile exacte ca tipuri: „Iași” în loc de string.
  • satisfies: Verifică dacă o valoare se potrivește cu un tip, dar păstrează tipul ei exact, mai precis decât Tip.
  • non-null (!): Semnul ! după o expresie îi spune compilatorului că valoarea nu este null sau undefined, fără verificare.
  • type guards: Verificări la rulare pe care TypeScript le înțelege și după care știe tipul exact al unei valori.
  • unknown: Tipul sigur pentru valori necunoscute: acceptă orice, dar nu poți folosi valoarea până nu verifici ce tip are.