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
asca să scapi de orice eroare. Fiecareaseste un loc unde verificarea este oprită; caută întâi un type guard. - Scrii
{} as Elevca să creezi un obiect gol. Proprietățile lipsesc la rulare; construiește obiectul complet sau foloseștePartial<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.