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

Drakuno
function isSameOrSubclass<T>(target:any,reference:typeof T):target is T
{
    const   targetIsReference   = target===reference,
            targetIsTruthy      = target&&true,
            targetHasPrototype  = "prototype" in target,
            targetIsSubclass    = targetIsTruthy&&targetHasPrototype&&(target.prototype instanceof reference)
    return targetIsReference||targetIsSubclass;
}

コンパイラは次のエラーで失敗します:

TS2693:「T」は型のみを参照しますが、ここでは値として使用されています。

で置き換えるtypeof Tnew()=>Tコンパイルが可能になりますが、これは許可されません。

isSameOrSubclass<Class>(foo,Class)

なぜなら

タイプ 'typeof Class'の引数は、タイプ 'new()=> Class'のパラメーターに割り当てることができません。

TJクラウダー

T次のようにextends new() => {}*または同様のものに制約してから、直接(経由ではなくtypeof使用する必要があります

function isSameOrSubclass<T extends new() => {}>(target:any,reference: T):target is T
// −−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^^^^^^−−−−−−−−−−−−−−−−−−−−−−−−^
{
    const   targetIsReference   = target===reference,
            targetIsTruthy      = target&&true,
            targetHasPrototype  = "prototype" in target,
            targetIsSubclass    = targetIsTruthy&&targetHasPrototype&&(target.prototype instanceof reference)
    return targetIsReference||targetIsSubclass;
}

*または同様のもの:この型new() => {}は、引数がゼロのコンストラクター関数を持つクラスを参照します。したがって、1つ以上の引数コンストラクターを持つクラスを受け入れるには、別の型が必要です。すなわちnew(...args) => {}

そして、次のように、明示的な型パラメーターなしで使用します。

class Parent {}
class Child extends Parent {}
class Unrelated {}
console.log(isSameOrSubclass(Child, Parent));      // true
console.log(isSameOrSubclass(Parent, Parent));     // true
console.log(isSameOrSubclass(Parent, Unrelated));  // false

遊び場リンク

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

別の関数でオブジェクトを参照するにはどうすればよいですか?

分類Dev

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

分類Dev

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

分類Dev

Rの関数内のオブジェクトを参照するにはどうすればよいですか?

分類Dev

get関数をオブジェクトとして参照するにはどうすればよいですか

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

非ジェネリックタスクを返す関数をValueTaskに変換するにはどうすればよいですか?

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

ジェネリッククラス内でEnumの静的関数を使用するにはどうすればよいですか?

分類Dev

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

分類Dev

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

分類Dev

Typescript / JSX with Reactで矢印関数を使用してジェネリックを使用するにはどうすればよいですか?

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

Related 関連記事

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

    別の関数でオブジェクトを参照するにはどうすればよいですか?

  8. 8

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

  9. 9

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

  10. 10

    Rの関数内のオブジェクトを参照するにはどうすればよいですか?

  11. 11

    get関数をオブジェクトとして参照するにはどうすればよいですか

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

    非ジェネリックタスクを返す関数をValueTaskに変換するにはどうすればよいですか?

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

    ジェネリッククラス内でEnumの静的関数を使用するにはどうすればよいですか?

  22. 22

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

  23. 23

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

  24. 24

    Typescript / JSX with Reactで矢印関数を使用してジェネリックを使用するにはどうすればよいですか?

  25. 25

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

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

ホットタグ

アーカイブ