array (T[] și Array) în TypeScript

Tipuri de bază TypeScript 1.0

Tipul tablourilor: T[] și Array<T> înseamnă același lucru, un tablou cu elemente de tipul T.

Sintaxă
let note: number[] = [9, 10];
let orase: Array<string> = ["Iași"];
let fixe: readonly string[] = ["a"];

Ce face array (T[] și Array<T>)

Un tablou are toate elementele de același tip, scris în două feluri echivalente: number[] sau Array<number>. Forma scurtă este cea obișnuită. Pentru elemente de mai multe tipuri folosești un union în paranteze: (string | number)[].

readonly number[] (sau ReadonlyArray<number>) este un tablou din care poți doar citi: push, pop, sort și atribuirea a[0] = ... sunt erori. Folosește-l la parametrii funcțiilor care nu trebuie să modifice tabloul primit.

Metodele tablourilor (map, filter, reduce, find…) sunt cele din JavaScript, explicate în secțiunea JavaScript. TypeScript le dă tipuri: map pe un number[] cu o funcție care returnează text dă string[]. Citirea note[5] are tipul number chiar dacă elementul nu există; opțiunea noUncheckedIndexedAccess schimbă tipul în number | undefined. Pentru o listă cu lungime și tipuri fixe pe poziții vezi tuple.

Exemple

Exemplul 1: Cele două forme și tipurile deduse

const note: number[] = [9, 10, 7];
const orase: Array<string> = ["Iași", "Cluj", "Brașov"];
const amestec: (string | number)[] = ["Ana", 19, "Iași"];

const texte = note.map((n) => `nota ${n}`);   // string[]
const mari = note.filter((n) => n >= 9);      // number[]

console.log(texte, mari);
console.log(orase.join(", "), amestec.length);

Rezultat

[ 'nota 9', 'nota 10', 'nota 7' ] [ 9, 10 ]
Iași, Cluj, Brașov 3

Exemplul 2: Tablou readonly ca parametru

Funcția sortează o copie (toSorted), deci tabloul original rămâne neschimbat.

function clasament(note: readonly number[]): number[] {
    return note.toSorted((a, b) => b - a);
}

const note = [7, 10, 9];
console.log(clasament(note));
console.log(note);

Rezultat

[ 10, 9, 7 ]
[ 7, 10, 9 ]

Exemplul 3: Modificare interzisă pe readonly

function adauga(note: readonly number[]) {
    note.push(10);
}
adauga([9]);

Eroarea afișată de tsc

exemplu.mts(2,10): error TS2339: Property 'push' does not exist on type 'readonly number[]'.

Greșeli frecvente

  • Scrii string | number[] și vrei un tablou mixt. Fără paranteze înseamnă „un text SAU un tablou de numere”; scrie (string | number)[].
  • Crezi că note[10] este sigur pentru că tipul este number. Elementul poate lipsi; verifică lungimea sau activează noUncheckedIndexedAccess.

Comenzi înrudite

  • tuple: Un tablou cu număr fix de elemente, în care fiecare poziție are tipul ei, de exemplu [nume, notă].
  • readonly: Marchează o proprietate care primește valoare o singură dată și nu mai poate fi modificată după aceea.
  • generics (<T>): Parametri de tip: o funcție sau clasă scrisă o dată, care funcționează cu orice tip și păstrează tipul exact.
  • union (|): Un tip care acceptă valori din mai multe tipuri: A | B înseamnă fie A, fie B.