Ce face any
any spune compilatorului „nu verifica”. O variabilă any poate primi orice valoare și poți apela pe ea orice metodă, fără eroare de compilare. Dacă metoda nu există, programul se oprește abia la rulare, exact ca în JavaScript simplu.
any se „răspândește”: rezultatul oricărei operații pe un any este tot any, deci verificarea dispare și în codul care îl folosește. Este util doar temporar, când migrezi cod JavaScript vechi. În modul strict, opțiunea noImplicitAny interzice any-ul implicit (parametri fără tip), dar nu și pe cel scris explicit.
Pentru date despre care nu știi nimic (răspunsul unui server, JSON.parse), folosește unknown: acceptă orice, ca any, dar te obligă să verifici tipul înainte de folosire.
Exemple
Exemplul 1: any acceptă orice
Variabila își schimbă tipul de trei ori, iar compilatorul nu spune nimic.
let valoare: any = 42;
console.log(typeof valoare, valoare);
valoare = "Ana";
console.log(typeof valoare, valoare.toUpperCase());
valoare = { oras: "Iași" };
console.log(typeof valoare, valoare.oras);
Rezultat
number 42
string ANA
object Iași
Exemplul 2: Greșeala trece de compilare și apare la rulare
Metoda se numește toUpperCase, nu toUppercase. Cu any, tsc nu observă; programul se oprește la rulare. Aici eroarea este prinsă cu try/catch ca să vezi mesajul.
const date: any = JSON.parse('{"nume": "Ana"}');
try {
console.log(date.nume.toUppercase());
} catch (e) {
console.log("Eroare la rulare:", (e as Error).message);
}
Rezultat
Eroare la rulare: date.nume.toUppercase is not a function
Exemplul 3: Același cod cu un tip corect
Cu o interfață, greșeala de scriere este prinsă înainte de rulare.
interface Elev {
nume: string;
}
const date: Elev = JSON.parse('{"nume": "Ana"}');
console.log(date.nume.toUppercase());
Eroarea afișată de tsc
exemplu.mts(5,23): error TS2551: Property 'toUppercase' does not exist on type 'string'. Did you mean 'toUpperCase'?
Greșeli frecvente
- Pui
anyca să scapi de o eroare de compilare. Eroarea nu dispare, se mută la rulare. Caută tipul corect sau foloseșteunknown. - Nu observi
any-ul care vine din alte locuri:JSON.parsereturneazăany. Pune imediat un tip pe rezultat.
Comenzi înrudite
unknown: Tipul sigur pentru valori necunoscute: acceptă orice, dar nu poți folosi valoarea până nu verifici ce tip are.never: Tipul fără nicio valoare: pentru funcții care nu se termină normal și pentru cazurile imposibile din cod.as (type assertion): Îi spui compilatorului ce tip are o valoare, când știi mai mult decât el; nu face nicio conversie la rulare.strict mode: Opțiunea strict pornește toate verificările stricte: null separat, fără any implicit, câmpuri inițializate și altele.