ジェネリック関数型にオプションの引数型を含めるにはどうすればよいですか?

ウェズリーワイザー

私は次のようなジェネリック関数型を持っています:

type Test<TArg> = (arg: TArg) => void;

ほとんどの場合、引数は次のタイプに準拠する関数によって使用されます。

let x1: Test<number> = (n) => { console.log(n) };
let x2: Test<string> = (s) => { alert(s) };

ただし、引数をとらない関数がある場合もあります。

let y1: Test<undefined> = () => { };

次のように、呼び出しサイトで引数を指定せずにこの関数を呼び出せるようにしたいと思います。

y1();

しかし、どのタイプのプラグインを使用してもTArg、それはできないようです。の定義でパラメータをオプションにすることなくこれを行う方法はありますTestか?

これが私が試したことです:

type Test<TArg> = (arg: TArg) => void;

let x: Test<number> = (n) => { console.log(n) };
let y1: Test<never> = () => { };
let y2: Test<any> = () => { };
let y3: Test<undefined> = () => { };
let y4: Test<null> = () => { };

x(1);
y1(); //Expected 1 arguments, but got 0.
y2(); //Expected 1 arguments, but got 0.
y3(); //Expected 1 arguments, but got 0.
y4(); //Expected 1 arguments, but got 0.
グレッグローズマリー

実行ラッパーが許容できる場合は、関数の長さ(0または1)のいずれかを処理し、引数に対して型安全性のあるソリューションを考え出しました。

type Test<T> = (arg?: T) => void;

class Wrapper<T, F extends Test<T>> {
    public execute: F;

    public static create<T1, F1 extends Test<T1>>(method: F1): Wrapper<T1, F1> {
        return new Wrapper(method);
    }

    constructor(method: F) {
        this.execute = method;
    }
}

const func1 = Wrapper.create((a: string) => console.log(a));
const func2 = Wrapper.create(() => { });

func1.execute('3');
func2.execute();

func1.execute(5); // 5 is not assignable to type "string"
func1.execute(); // expected 1 argument
func2.execute(5); // expected 0 arguments

これを1つのパラメーターを超えて拡張したい場合は、ジェネリック型を追加できますが、それぞれを手動で定義してラッパークラスを介して実行する必要がありますが、機能します。

EDITは元のオプションのパラメータソリューションを削除しました

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

オプションの型であると仮定して、ジェネリックプロパティを迅速にアンラップする関数を作成するにはどうすればよいですか?

分類Dev

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

分類Dev

Swiftでジェネリック型の引数を取る関数を再割り当てするにはどうすればよいですか?

分類Dev

インターフェイスでオプションのジェネリック型を宣言するにはどうすればよいですか?

分類Dev

C#でオープンジェネリックの型パラメーターの数を取得するにはどうすればよいですか?

分類Dev

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

分類Dev

型ジェネリック関数ポインタを渡すにはどうすればよいですか?

分類Dev

重要な関係を持つ複数のジェネリック型を持つメンバーを宣言するにはどうすればよいですか?

分類Dev

ジェネリックを含む引数に基づいて関数の戻り値の型を推測するにはどうすればよいですか?

分類Dev

Fn(T)+ '静的レジスタを'ジェネリック型引数Tの '静的として作成するにはどうすればよいですか?

分類Dev

Scalaでジェネリック型のオブジェクト/シングルトンを作成するにはどうすればよいですか?

分類Dev

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

分類Dev

引数キーがジェネリック型でリストされていることを確認するにはどうすればよいですか?

分類Dev

C#でジェネリック型引数を指定するときに `dynamic`を使用するにはどうすればよいですか?

分類Dev

Reactの子関数型コンポーネントでアクションをトリガーするにはどうすればよいですか?

分類Dev

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

分類Dev

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

分類Dev

TypeScriptのネストされたオブジェクトに関数の引数型を使用して関数の引数を入力するにはどうすればよいですか?

分類Dev

メソッド引数のジェネリック型パラメーターのアノテーションにアクセスするにはどうすればよいですか?

分類Dev

Swift 5.1(Xcode 11 Playground)で、オプションのジェネリック関数シグネチャと非ジェネリック関数シグネチャの両方のオーバーロードを実現するにはどうすればよいですか?

分類Dev

Scala:関数の戻り値の型をジェネリックにし、ランタイム引数に依存させるにはどうすればよいですか?

分類Dev

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

分類Dev

型付きジェネリック関数にTypescript型オブジェクトインデックスを使用するにはどうすればよいですか?

分類Dev

列挙型オブジェクトのインクリメント関数を実装するにはどうすればよいですか?

分類Dev

クラス<T>のオープンジェネリック型のリストを作成するにはどうすればよいですか?

分類Dev

非ジェネリック関数を呼び出すときに、型アノテーションをインラインで提供するにはどうすればよいですか?

分類Dev

UMLの辞書に単純なジェネリック型アノテーションを追加するにはどうすればよいですか?

分類Dev

列挙型自体の代わりに列挙型メンバーの型を使用するジェネリック関数を作成するにはどうすればよいですか?

分類Dev

ポインタデータ型変数にオブジェクトを含めるにはどうすればよいですか?

Related 関連記事

  1. 1

    オプションの型であると仮定して、ジェネリックプロパティを迅速にアンラップする関数を作成するにはどうすればよいですか?

  2. 2

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

  3. 3

    Swiftでジェネリック型の引数を取る関数を再割り当てするにはどうすればよいですか?

  4. 4

    インターフェイスでオプションのジェネリック型を宣言するにはどうすればよいですか?

  5. 5

    C#でオープンジェネリックの型パラメーターの数を取得するにはどうすればよいですか?

  6. 6

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

  7. 7

    型ジェネリック関数ポインタを渡すにはどうすればよいですか?

  8. 8

    重要な関係を持つ複数のジェネリック型を持つメンバーを宣言するにはどうすればよいですか?

  9. 9

    ジェネリックを含む引数に基づいて関数の戻り値の型を推測するにはどうすればよいですか?

  10. 10

    Fn(T)+ '静的レジスタを'ジェネリック型引数Tの '静的として作成するにはどうすればよいですか?

  11. 11

    Scalaでジェネリック型のオブジェクト/シングルトンを作成するにはどうすればよいですか?

  12. 12

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

  13. 13

    引数キーがジェネリック型でリストされていることを確認するにはどうすればよいですか?

  14. 14

    C#でジェネリック型引数を指定するときに `dynamic`を使用するにはどうすればよいですか?

  15. 15

    Reactの子関数型コンポーネントでアクションをトリガーするにはどうすればよいですか?

  16. 16

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

  17. 17

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

  18. 18

    TypeScriptのネストされたオブジェクトに関数の引数型を使用して関数の引数を入力するにはどうすればよいですか?

  19. 19

    メソッド引数のジェネリック型パラメーターのアノテーションにアクセスするにはどうすればよいですか?

  20. 20

    Swift 5.1(Xcode 11 Playground)で、オプションのジェネリック関数シグネチャと非ジェネリック関数シグネチャの両方のオーバーロードを実現するにはどうすればよいですか?

  21. 21

    Scala:関数の戻り値の型をジェネリックにし、ランタイム引数に依存させるにはどうすればよいですか?

  22. 22

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

  23. 23

    型付きジェネリック関数にTypescript型オブジェクトインデックスを使用するにはどうすればよいですか?

  24. 24

    列挙型オブジェクトのインクリメント関数を実装するにはどうすればよいですか?

  25. 25

    クラス<T>のオープンジェネリック型のリストを作成するにはどうすればよいですか?

  26. 26

    非ジェネリック関数を呼び出すときに、型アノテーションをインラインで提供するにはどうすればよいですか?

  27. 27

    UMLの辞書に単純なジェネリック型アノテーションを追加するにはどうすればよいですか?

  28. 28

    列挙型自体の代わりに列挙型メンバーの型を使用するジェネリック関数を作成するにはどうすればよいですか?

  29. 29

    ポインタデータ型変数にオブジェクトを含めるにはどうすればよいですか?

ホットタグ

アーカイブ