Tipuri de obiecte în TypeScript
TypeScript are o sintaxă specială pentru tiparea obiectelor: enumeri fiecare nume de proprietate și tipul ei între acolade.
Dacă obiectele sunt ceva nou pentru tine, citește mai întâi despre obiectele JavaScript.
Notă: Astfel de tipuri de obiecte pot fi scrise și separat, ca să fie reutilizate — vezi interfețele pentru mai multe detalii.
Exemplu
Tipul lui car spune că acesta are proprietatea type de tip string, proprietatea model de tip string și proprietatea year de tip number.
car al cărei tip este { type: string, model: string, year: number } și atribuie-i un obiect cu type „Toyota”, model „Corolla” și year 2009. Nu se afișează nimic.
Ieșire: program TypeScript și rezultatul capturat
const car: { type: string, model: string, year: number } = {
type: "Toyota",
model: "Corolla",
year: 2009
};
Inferența tipurilor
TypeScript poate deduce tipurile proprietăților unui obiect din valorile lor.
Exemplu
car.type este dedus ca string, așa că atribuirea unui alt șir de caractere este în regulă, dar atribuirea unui număr este o eroare.
car având doar type: "Toyota", reatribuie car.type = "Ford" (fără eroare), apoi atribuie numărul 2 lui car.type — acea linie trebuie să eșueze cu „Type 'number' is not assignable to type 'string'”.
Ieșire: program TypeScript și rezultatul capturat
const car = {
type: "Toyota",
};
car.type = "Ford"; // fără eroare
car.type = 2; // Eroare: Type 'number' is not assignable to type 'string'.
Proprietăți opționale
Proprietățile opționale sunt proprietăți care nu trebuie neapărat să fie prezente atunci când obiectul este creat. Marchează-le cu un ? după nume.
Fără ?, omiterea unei proprietăți este o eroare, așa cum arată fragmentul de cod.
Exemplu cu o proprietate opțională
mileage? face proprietatea opțională, așa că obiectul poate fi creat fără ea, iar valoarea îi poate fi dată mai târziu.
car cu tipul { type: string, mileage?: number }, inițializează-l doar cu type: "Toyota" (fără eroare, pentru că mileage este opțională), apoi setează car.mileage = 2000. Nu se afișează nimic.
Ieșire: program TypeScript și rezultatul capturat
const car: { type: string, mileage?: number } = { // fără eroare
type: "Toyota"
};
car.mileage = 2000;
Proprietate obligatorie lipsă
Deoarece aici mileage este obligatorie, crearea lui car fără ea este o eroare: „Property 'mileage' is missing in type '{ type: string;}' but required in type '{ type: string; mileage: number; }'”.
const car: { type: string, mileage: number } = { // Error: Property 'mileage' is missing in type '{ type: string;}' but required in type '{ type: string; mileage: number; }'.
type: "Toyota",
};
car.mileage = 2000;
Semnături de index
Semnăturile de index tipează obiectele care nu au o listă fixă de proprietăți. Ele spun ce tip au cheile și ce tip au valorile.
Notă: O astfel de semnătură de index poate fi scrisă și cu un tip utilitar precum Record<string, number>. Află mai multe în capitolul Tipuri utilitare TypeScript.
Exemplu
Orice cheie de tip string este permisă pe nameAgeMap, dar fiecare valoare trebuie să fie un number, așa că "Fifty" este o eroare.
nameAgeMap tipată { [index: string]: number }, setează nameAgeMap.Jack = 25 (fără eroare), apoi setează nameAgeMap.Mark = "Fifty" — acea linie trebuie să eșueze cu „Type 'string' is not assignable to type 'number'”.
Ieșire: program TypeScript și rezultatul capturat
const nameAgeMap: { [index: string]: number } = {};
nameAgeMap.Jack = 25; // fără eroare
nameAgeMap.Mark = "Fifty"; // Eroare: Type 'string' is not assignable to type 'number'.