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
ReturnTypepe o metodă de clasă fără să ajungi la tipul ei: scrieReturnType<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.