ジェネリック関数の値を作成するにはどうすればよいですか?

Finesse

次のコードについて考えてみます。

interface Foo<T1> {
  foo: string;
  baz: T1;
}

function toFoo<T2>(value: T2): Foo<T2> {
  return {
    foo: 'bar',
    baz: value
  };
}

// Actually this function is imported from an NPM package so I can't change it
// The example is given for a better illustration
function memoize<T3, T4>(func: (arg: T3) => T4): (arg: T3) => T4 {
  // Some implementation...
  return func;
}

const memoizedToFoo: {<T5>(value: T5): Foo<T5>} = // ???

toFooこの関数は汎用的です。私もtoFooそれのメモ化されたバージョンをジェネリックにする必要があります。memoizeタイプと実装を変更することはできませんmemoizedToFoo与えられたインターフェースと一致するように実装する方法は

私はこれを試しましたが、機能しません:

const memoizedToFoo<T5> = memoize(toFoo<T5>); // unexpected <T5>
ユニオナル

memorize()機能を変更できますか?頑張っています。

以下は、正しいタイプを自動的に推測します。

interface Foo<T1> {
  foo: string;
  baz: T1;
}

function toFoo<T2>(value: T2): Foo<T2> {
  return {
    foo: 'bar',
    baz: value
  };
}

function memoize<F extends Function>(func: F): F {
  // Some implementation...
  return func;
}

const memoizedToFoo = memoize(toFoo)

遊び場リンク

更新:変更できないためmemorize()、次のように適切にオーバーライドできます。

// memorize.ts
import { memoize as origMemoize } from 'memoize'
// or if it is commonJS
import origMemoize from 'memoize'

export const memoize = origMemoize as <F extends Function>(func: F) => F

その後、オリジナルと同じように使用できます。

import { memoize } from './memoize'

// code away

このソリューションFは、に制限されていないため、ある種の安全性とトレードオフすることに注意してください。(arg: X) => Y

これに適切に対処するには、https//github.com/Microsoft/TypeScript/pull/22368が必要です

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++でジェネリックstringToVector関数を作成するにはどうすればよいですか?

分類Dev

この関数をジェネリック型にするにはどうすればよいですか?

分類Dev

任意の出力ストリームに出力するジェネリック関数を作成するにはどうすればよいですか?

分類Dev

すべてのタイプを非整列化するジェネリック関数を作成するにはどうすればよいですか?

分類Dev

Scalaのすべての数値で関数をジェネリックとして定義するにはどうすればよいですか?

分類Dev

特定のクラス階層に対してのみジェネリック関数を作成するにはどうすればよいですか?

分類Dev

FakeItEasyで複数のジェネリック関数の戻り値を設定するにはどうすればよいですか?

分類Dev

MLReaderで関数をジェネリックにするにはどうすればよいですか

分類Dev

出力付きのストアドプロシージャのジェネリック関数を作成するにはどうすればよいですか?

分類Dev

ジェネリック型パラメーターを使用して関数のベクトルを作成するにはどうすればよいですか?

分類Dev

配列内の要素を置き換えるジェネリック関数を作成するにはどうすればよいですか?

分類Dev

ジェネリック関数で「typeofT」を参照するにはどうすればよいですか?

分類Dev

データコンストラクターのジェネリック関数を作成するにはどうすればよいですか?

分類Dev

C#のジェネリック関数で型を渡すにはどうすればよいですか?

分類Dev

KotlinでenumValues <T>のジェネリック関数を作成するにはどうすればよいですか?

分類Dev

ジェネリックラムダへの関数ポインターを作成するにはどうすればよいですか?

分類Dev

JTextFieldのジェネリックセッターを作成するにはどうすればよいですか?

分類Dev

Swiftで2つのジェネリック値を追加するにはどうすればよいですか?

分類Dev

Javaでジェネリック配列の値を取得するにはどうすればよいですか?

分類Dev

XML解析用のジェネリックを作成するにはどうすればよいですか?

分類Dev

モデルに適応するジェネリック関数を作成するにはどうすればよいですか?

分類Dev

符号付き整数と符号なし整数を区別するジェネリック関数を作成するにはどうすればよいですか?

分類Dev

ジェネリック関数を公開するDLLを作成するにはどうすればよいですか?

分類Dev

Goでは、スライスを使用してジェネリック関数を作成するにはどうすればよいですか?

分類Dev

SwiftでCollectionTypeを受け取るジェネリック再帰関数を作成するにはどうすればよいですか?

分類Dev

指定されたジェネリック型で関数型を作成するにはどうすればよいですか?

分類Dev

迅速なジェネリック可変個引数関数を作成するにはどうすればよいですか?

分類Dev

3つの関数を1つのジェネリック関数に変換するにはどうすればよいですか?

分類Dev

数値のジェネリック関数を作成するためにscalaでバインドされた型パラメーターを設定するにはどうすればよいですか?

Related 関連記事

  1. 1

    C ++でジェネリックstringToVector関数を作成するにはどうすればよいですか?

  2. 2

    この関数をジェネリック型にするにはどうすればよいですか?

  3. 3

    任意の出力ストリームに出力するジェネリック関数を作成するにはどうすればよいですか?

  4. 4

    すべてのタイプを非整列化するジェネリック関数を作成するにはどうすればよいですか?

  5. 5

    Scalaのすべての数値で関数をジェネリックとして定義するにはどうすればよいですか?

  6. 6

    特定のクラス階層に対してのみジェネリック関数を作成するにはどうすればよいですか?

  7. 7

    FakeItEasyで複数のジェネリック関数の戻り値を設定するにはどうすればよいですか?

  8. 8

    MLReaderで関数をジェネリックにするにはどうすればよいですか

  9. 9

    出力付きのストアドプロシージャのジェネリック関数を作成するにはどうすればよいですか?

  10. 10

    ジェネリック型パラメーターを使用して関数のベクトルを作成するにはどうすればよいですか?

  11. 11

    配列内の要素を置き換えるジェネリック関数を作成するにはどうすればよいですか?

  12. 12

    ジェネリック関数で「typeofT」を参照するにはどうすればよいですか?

  13. 13

    データコンストラクターのジェネリック関数を作成するにはどうすればよいですか?

  14. 14

    C#のジェネリック関数で型を渡すにはどうすればよいですか?

  15. 15

    KotlinでenumValues <T>のジェネリック関数を作成するにはどうすればよいですか?

  16. 16

    ジェネリックラムダへの関数ポインターを作成するにはどうすればよいですか?

  17. 17

    JTextFieldのジェネリックセッターを作成するにはどうすればよいですか?

  18. 18

    Swiftで2つのジェネリック値を追加するにはどうすればよいですか?

  19. 19

    Javaでジェネリック配列の値を取得するにはどうすればよいですか?

  20. 20

    XML解析用のジェネリックを作成するにはどうすればよいですか?

  21. 21

    モデルに適応するジェネリック関数を作成するにはどうすればよいですか?

  22. 22

    符号付き整数と符号なし整数を区別するジェネリック関数を作成するにはどうすればよいですか?

  23. 23

    ジェネリック関数を公開するDLLを作成するにはどうすればよいですか?

  24. 24

    Goでは、スライスを使用してジェネリック関数を作成するにはどうすればよいですか?

  25. 25

    SwiftでCollectionTypeを受け取るジェネリック再帰関数を作成するにはどうすればよいですか?

  26. 26

    指定されたジェネリック型で関数型を作成するにはどうすればよいですか?

  27. 27

    迅速なジェネリック可変個引数関数を作成するにはどうすればよいですか?

  28. 28

    3つの関数を1つのジェネリック関数に変換するにはどうすればよいですか?

  29. 29

    数値のジェネリック関数を作成するためにscalaでバインドされた型パラメーターを設定するにはどうすればよいですか?

ホットタグ

アーカイブ