[解決済み] ジェネリック関数のTypescript ReturnType
2023-03-31 18:27:05
質問
新しい
ReturnType
で
TypeScript 2.8
は、特定の関数の戻り値の型を抽出することができる、本当に便利な機能です。
function foo(e: number): number {
return e;
}
type fooReturn = ReturnType<typeof foo>; // number
しかし、ジェネリック関数の文脈で使うには問題があります。
function foo<T>(e: T): T {
return e;
}
type fooReturn = ReturnType<typeof foo>; // type fooReturn = {}
type fooReturn = ReturnType<typeof foo<number>>; // syntax error
type fooReturn = ReturnType<(typeof foo)<number>>; // syntax error
汎用関数が特定の型のパラメータを与えたときの戻り値の型を抽出する方法はありますか?
どのように解決するのですか?
TypeScriptコンパイラが
typeof foo
を総称型と見なさない。コンパイラのバグとしか言いようがない。
しかし、TypeScriptでは
呼び出し可能なインターフェイス
があり、問題なく汎用的に使えるので、関数のシグネチャと互換性のある呼び出し可能なインタフェースを導入すれば、それに相当するものを独自に実装することができます。
ReturnType
をこのように実装することができます。
function foo<T>(x: T): T {
return x;
}
interface Callable<R> {
(...args: any[]): R;
}
type GenericReturnType<R, X> = X extends Callable<R> ? R : never;
type N = GenericReturnType<number, typeof foo>; // number
関連
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] Javaで汎用配列を作成する方法は?
-
[解決済み] TypeScriptでの取得と設定
-
[解決済み】TypeScriptのインターフェースと型について
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
-
[解決済み】TypeScript - 正しいバージョンのsetTimeoutを使用する(ノードとウィンドウの比較)
-
[解決済み] tsconfig.jsonのtargetは何のためにあるのですか?
-
[解決済み] Typescript で Enum を制限付きキータイプとして使用する
-
[解決済み] Angular 2で相対パスが非常に長いインポートを回避する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angular 2でアプリ起動時にサービスを実行する方法
-
[解決済み] Typescript のプリミティブ型:"number" と "Number" の違い(TSC は大文字と小文字を区別しない)?
-
[解決済み] Visual Studio Code - インポート引用符の設定を調整する
-
[解決済み] typescriptのインターフェイスを別ファイルで宣言しインポートする方法
-
[解決済み] tsconfigの "target "と "module "を理解する。
-
[解決済み] 他のプロパティを使用できる TypeScript インターフェース
-
[解決済み] TypeScript 2: 型付けされていない npm モジュールのためのカスタム型付け
-
[解決済み] Angular2 - Http POST リクエストパラメータ
-
[解決済み] TypeScriptの"=>"の意味とは?(ファットアロー)
-
[解決済み] 型{ [key: string]: boolean; }は何を意味するのでしょうか?