ReturnType în TypeScript

ReturnType<F> dă tipul rezultatului unei funcții; pentru o funcție concretă scrii ReturnType<typeof f>.

Sintaxă
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;

Ce face ReturnType

ReturnType<F> primește un tip de funcție și dă tipul a ce returnează. Pentru o funcție declarată în cod, combini cu typeof: ReturnType<typeof creeazaElev>. Așa nu mai scrii de mână un tip care există deja, implicit, în cod.

Pentru o funcție async, rezultatul este un Promise<...>; ca să ajungi la valoarea din el, combini cu Awaited: Awaited<ReturnType<typeof incarca>>. Pentru funcții cu overload, se folosește ultima semnătură.

Este definit cu infer. Perechea lui pentru parametri este Parameters.

Parametri

Parametru Descriere
T Un tip de funcție, de exemplu typeof f sau (x: number) => string.

Ce returnează

Tipul valorii returnate de funcție.

Exemple

Exemplul 1: Tipul unui obiect construit de o funcție

function creeazaComanda(client: string, produse: string[]) {
    return {
        id: Math.floor(1000 + produse.length),
        client,
        produse,
        creata: "2026-10-19",
        livrata: false,
    };
}
type Comanda = ReturnType<typeof creeazaComanda>;

function marcheazaLivrata(c: Comanda): Comanda {
    return { ...c, livrata: true };
}

console.log(marcheazaLivrata(creeazaComanda("Ana", ["caiet", "pix"])));

Rezultat

{
  id: 1002,
  client: 'Ana',
  produse: [ 'caiet', 'pix' ],
  creata: '2026-10-19',
  livrata: true
}

Exemplul 2: Funcție async și Awaited

async function incarcaNote() {
    return { Ana: [10, 9], Mihai: [7, 8] };
}
type Promisiune = ReturnType<typeof incarcaNote>;      // Promise<{ Ana: number[]; Mihai: number[] }>
type Note = Awaited<Promisiune>;                       // { Ana: number[]; Mihai: number[] }

const p: Promisiune = incarcaNote();
const note: Note = await p;
console.log(note.Ana, note.Mihai);

Rezultat

[ 10, 9 ] [ 7, 8 ]

Exemplul 3: Valoare în loc de tip

ReturnType cere un tip. Fără typeof, numele funcției este o valoare.

function f() {
    return 1;
}
type R = ReturnType<f>;
const r: R = f();
console.log(r);

Eroarea afișată de tsc

exemplu.mts(4,21): error TS2749: 'f' refers to a value, but is being used as a type here. Did you mean 'typeof f'?

Greșeli frecvente

  • Uiți typeof: ReturnType<f> dă eroarea ‘f’ refers to a value, but is being used as a type here.
  • Folosești ReturnType pe o metodă de clasă fără să ajungi la tipul ei: scrie ReturnType<Clasa["metoda"]>.

Comenzi înrudite

  • Parameters: Parameters<F> dă tipurile parametrilor unei funcții, ca tuple; Parameters<F>[0] este primul parametru.
  • Awaited: Awaited<T> dă tipul valorii pe care o obții cu await din T, desfăcând și Promise-urile imbricate.
  • typeof (tip): În poziție de tip, typeof x dă tipul variabilei sau funcției x, ca să nu-l scrii de mână.
  • infer: În ramura extends a unui tip condițional, infer X „prinde” o parte din tip și o dă un nume.
  • InstanceType: InstanceType<C> dă tipul obiectelor create cu new dintr-un tip de clasă C.