Tablouri în TypeScript
TypeScript are o sintaxă specială pentru a da tip tablourilor: scrie tipul elementelor urmat de [].
Dacă tablourile sunt ceva nou pentru tine, citește mai întâi despre tablourile din JavaScript.
Exemplu
names este de tip string[], deci acceptă șiruri de caractere, dar adăugarea unui număr ar fi o eroare.
names cu tipul string[], adaugă "Dylan" cu push (fără eroare) și păstrează un names.push(3) comentat, însoțit de un comentariu care explică de ce ar eșua: un număr nu poate fi atribuit tipului string. Nu se afișează nimic.
Ieșire: program TypeScript și rezultatul capturat
const names: string[] = [];
names.push("Dylan"); // fără eroare
// names.push(3); // Eroare: Argument of type 'number' is not assignable to parameter of type 'string'.
Readonly
Cuvântul cheie readonly împiedică modificarea unui tablou după ce a fost creat.
Exemplu
Pentru că names este readonly string[], metodele care îl modifică, precum push, nu există pe el — apelarea uneia dintre ele este o eroare de compilare.
readonly împiedică modificarea unui tablou.
Declară names ca readonly string[] conținând ["Dylan"], apoi apelează names.push("Jack") — compilatorul trebuie să raporteze "Property 'push' does not exist on type 'readonly string[]'". Adaugă un comentariu care îl invită pe cititor să elimine readonly și să încerce din nou.
Ieșire: program TypeScript și rezultatul capturat
const names: readonly string[] = ["Dylan"];
names.push("Jack"); // Eroare: Property 'push' does not exist on type 'readonly string[]'.
// încearcă să elimini modificatorul readonly și vezi dacă funcționează?
Deducerea tipului
Dacă un tablou are valori în momentul creării, TypeScript îi poate deduce (determina) tipul din ele.
Exemplu
Tipul lui numbers este dedus ca number[]. Adăugarea altui număr este în regulă, dar adăugarea unui șir de caractere este o eroare, iar citirea lui numbers[0] dă un number.
number[] pentru un literal de tablou și cum îl impune.
Declară numbers = [1, 2, 3] fără adnotare de tip, adaugă 4 cu push (fără eroare), apoi adaugă șirul "2" — acea linie trebuie să eșueze cu "Argument of type 'string' is not assignable to parameter of type 'number'". La final, atribuie numbers[0] unei variabile head de tip number (fără eroare).
Ieșire: program TypeScript și rezultatul capturat
const numbers = [1, 2, 3]; // tip dedus number[]
numbers.push(4); // fără eroare
// comentează linia de mai jos pentru a vedea atribuirea reușită
numbers.push("2"); // Eroare: Argument of type 'string' is not assignable to parameter of type 'number'.
let head: number = numbers[0]; // fără eroare