typescript - Funktion paluuarvon tyypin saaminen
Minulla on seuraava funktio:
function test(): number {
return 42;
}
Voin saada funktion tyypin käyttämällä typeof:
type t = typeof test;
Tässä t on () => number.
Onko olemassa tapa saada funktion palautustyyppi? Haluaisin, että t olisi number eikä () => number.
Vastaus #1
MUOKKAA
TypeScript 2.8:sta alkaen tämä on virallisesti mahdollista ReturnType<T>-koodilla.
type T10 = ReturnType<() => string>; // string
type T11 = ReturnType<(s: string) => void>; // void
type T12 = ReturnType<(<T>() => T)>; // {}
type T13 = ReturnType<(<T extends U, U extends number[]>() => T)>; // number[]
Katso tämä vetopyyntö Microsoft/TypeScriptiin saadaksesi lisätietoja.
TypeScript on mahtava!
Vanhan koulukunnan temppu
Ryanin vastaus ei valitettavasti enää toimi. Mutta olen muokannut sitä hakkeroinnilla, josta olen kohtuuttoman iloinen. Katsokaa:
const fnReturnType = (false as true) && fn();
Se toimii siten, että false muunnetaan litsaariväärtöksi true, jotta tyyppijärjestelmä ajattelisi palautusarvon olevan funktion tyyppi, mutta kun koodi suoritetaan, se ohittaa false.
Vastaus #2
Helpoin tapa TypeScript 2.8:ssa:
const foo = (): FooReturnType => {
}
type returnType = ReturnType<typeof foo>;
// returnType = FooReturnType
Vastaus #3
Käytä sisäänrakennettua ReturnType:
type SomeType = ReturnType<typeof SomeFunc>
ReturnType laajentuu muotoon:
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;
