Treci la conținutul principal

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.

Prompt
Arată sintaxa pentru tiparea inline a unui literal de obiect. Declară o constantă 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

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.

Prompt
Arată cum TypeScript deduce tipurile proprietăților dintr-un literal de obiect. Creează 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

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.

Prompt
Arată o proprietate opțională într-un tip de obiect. Declară 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

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; }'”.

script.ts
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.

Prompt
Arată o semnătură de index pentru un obiect cu chei string arbitrare și valori number. Declară o constantă goală 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