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;

Aiheeseen liittyviä artikkeleita