arrow functions cu tipuri în TypeScript

Funcții TypeScript 1.0

Funcțiile săgeată primesc tipuri ca orice funcție; în callback-uri, tipul parametrilor se deduce din context.

Sintaxă
const f = (a: number, b: number): number => a + b;
const g: (x: string) => number = (x) => x.length;

Ce face arrow functions cu tipuri

O arrow function se scrie (parametri) => rezultat. Tipurile se pun la fel ca la function: după fiecare parametru și, opțional, după paranteză pentru rezultat: (a: number): number => a * 2.

Avantajul mare este tipizarea contextuală: când dai o funcție săgeată unei funcții care știe deja ce primește (map, filter, addEventListener), parametrii primesc tipul automat și nu trebuie scriși. La fel când variabila are deja un tip de funcție.

Spre deosebire de function, o funcție săgeată nu are propriul this; folosește this-ul din locul unde a fost scrisă. De aceea e potrivită pentru callback-uri în metodele claselor (vezi this în funcții). Dacă returnezi direct un obiect, pune-l în paranteze: () => ({ x: 1 }).

Exemple

Exemplul 1: Tipuri scrise și tipuri deduse din context

În map și filter, parametrul e este automat Elev.

interface Elev {
    nume: string;
    nota: number;
}
const elevi: Elev[] = [
    { nume: "Ana", nota: 9 },
    { nume: "Mihai", nota: 4 },
    { nume: "Ioana", nota: 10 },
];

const promovat = (e: Elev): boolean => e.nota >= 5;
const nume = elevi.filter(promovat).map((e) => e.nume.toUpperCase());
const total = elevi.reduce((s, e) => s + e.nota, 0);

console.log(nume, total);

Rezultat

[ 'ANA', 'IOANA' ] 23

Exemplul 2: Funcție care returnează o funcție

reducere(10) creează o funcție nouă care aplică 10% reducere.

const reducere = (procent: number) => (pret: number): number =>
    Math.round(pret * (100 - procent)) / 100;

const reducere10 = reducere(10);
const reducere25 = reducere(25);
console.log(reducere10(80), reducere25(80));

const creeaza = (nume: string) => ({ nume, creat: "2026-10-19" });
console.log(creeaza("Ana"));

Rezultat

72 60
{ nume: 'Ana', creat: '2026-10-19' }

Exemplul 3: Parametru fără tip și fără context

const dublu = (x) => x * 2;
console.log(dublu(4));

Eroarea afișată de tsc

exemplu.mts(1,16): error TS7006: Parameter 'x' implicitly has an 'any' type.

Greșeli frecvente

  • Scrii () => { nume: "Ana" } și primești undefined: acoladele sunt corpul funcției. Pune obiectul în paranteze.
  • Folosești o funcție săgeată ca metodă într-un obiect literal și te aștepți ca this să fie obiectul. Folosește sintaxa de metodă metoda() { ... }.

Comenzi înrudite

  • funcții cu tipuri: Pui tipuri pe parametrii și pe rezultatul funcțiilor; fiecare apel este verificat la compilare.
  • this în funcții: Primul parametru numit this declară pe ce obiect trebuie apelată funcția; tsc verifică apelurile.
  • inferența tipurilor: TypeScript deduce singur tipul variabilelor și al rezultatelor din valorile pe care le scrii, fără adnotări.
  • generics (<T>): Parametri de tip: o funcție sau clasă scrisă o dată, care funcționează cu orice tip și păstrează tipul exact.