1. ホーム
  2. typescript

[解決済み] 関数の戻り値の型を取得する

2022-04-23 17:03:38

質問

以下のような関数があります。

function test(): number {
    return 42;
}

関数の型を取得するには typeof :

type t = typeof test;

ここです。 t() => number .

関数の戻り値の型を取得する方法はありますか?私は次のようにしたいと思います。 t になります。 number ではなく () => number .

解決方法は?

EDIT

TypeScript 2.8では、これは正式に ReturnType<T> .

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[]

参照 この Microsoft/TypeScript へのプルリクエストは をご覧ください。

TypeScriptはすごい!


昔ながらのハック

ライアンの回答は、残念ながらもう使えません。しかし、私はあるハックを使ってそれを修正しました。それは、私にとって理不尽なほど嬉しいものです。見てください。

const fnReturnType = (false as true) && fn();

をキャストすることで動作します。 false のリテラル値に対して true このため、型システムは戻り値を関数の型と見なしますが、実際にコードを実行すると、この関数は false .