Tとは異なる型のProxy <T>を引数として使用するにはどうすればよいですか?

レミ・ルセレット

Proxyクラスのリスト間で「負荷分散」を行うために、を使用したい状況にあります。

私がやろうとしていることの素朴な例は次のとおりです。

class Foo {
    constructor(private msg: string) {}

    foo() {
        console.log(this.msg);
    }
}

// @ts-ignore
const proxy: Foo = new Proxy([new Foo('foo'), new Foo('bar')], {
    get: (o, key) => {
        const client = o[Math.floor(Math.random() * o.length)];
        console.log(client, key);
        return client[key];
    },
});
proxy.foo();

これは「機能」します。問題は、typescriptを使用していることです。そして、Proxy型の定義のために、私たちは次のようなことをすることができません

new Proxy<Foo>([new Foo(), new Foo()], handler)

次のエラーが発生するため:

タイプ 'Foo []'の引数は、タイプ 'Foo'のパラメーターに割り当てることができません。

これを達成する方法はありますか; 型チェックを失うことなく?

Titian Cernicova-Dragomir

既存の定義を変更する必要はありません。単にそれらを拡張することができます。

モジュールシステムを使用している場合はProxyConstructor、それが機能するようにグローバルで再宣言する必要があります

declare global  {
    interface ProxyConstructor {
        new <TSource extends object, TTarget extends object>(target: TSource, handler: ProxyHandler<TSource>): TTarget;
    }
}


const proxy: Foo = new Proxy<Foo[], Foo>([new Foo('foo'), new Foo('bar')], {
    get: (o, key) => {
        const client = o[Math.floor(Math.random() * o.length)];
        console.log(client, key);
        return client[key];
    },
});
proxy.foo();

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

型引数がNULL可能できるようにすることを<どれT>とないKClass <T>なぜKClassはKClassとして宣言されています

分類Dev

&HashSet <&T>をIntoIterator <Item =&T>として使用するにはどうすればよいですか?

分類Dev

ジェネリック型T []を引数として持つメソッドを呼び出すにはどうすればよいですか?

分類Dev

T-SQLを使用して、長さが異なる複数の親子関係を組み合わせるにはどうすればよいですか?

分類Dev

Arc <T>をTと比較するにはどうすればよいですか?

分類Dev

Moq:Action <T>引数が空の関数であることを確認するにはどうすればよいですか?

分類Dev

synを使用しているときにOption <T>からTを取得するにはどうすればよいですか?

分類Dev

トーチスクリプト拡張を構築しようとすると、無効な型になります。整数型引数型エラーとしてサポートされているのはint64_tとboolのみです。

分類Dev

Roslynを使用してIEnumerable <T>の基になる型を取得するにはどうすればよいですか?

分類Dev

TObjectをTObjectList <T>としてキャストするにはどうすればよいですか?

分類Dev

新しいレーンを気にしないときに、int32x2_tをclang / AArch64のNEON組み込み関数を使用してint32x4_tに拡張するにはどうすればよいですか?

分類Dev

static_cast <T>を関数として渡すにはどうすればよいですか?

分類Dev

sshの-tフラグを指定してgcloudcompute sshを使用するにはどうすればよいですか?

分類Dev

Rでglm()を使用してt分布を使用するにはどうすればよいですか?

分類Dev

size_tと他の整数型を一緒に正しく使用するにはどうすればよいですか?

分類Dev

XSL-T 1.0を使用して、重複ノードに対して異なる出力を生成するにはどうすればよいですか?

分類Dev

Robo3Tを使用してAWSDocumentdbに接続するにはどうすればよいですか?

分類Dev

Tを定義していない別のアクターのハンドラーからMyActor :: from_registry()を呼び出しているときに、型アノテーションを判別するにはどうすればよいですか?

分類Dev

Lazy <T>と一緒に使用した場合、MemoryCacheから例外を識別して排除するにはどうすればよいですか?

分類Dev

T-SQLを使用してURLからXMLを読み取るにはどうすればよいですか?

分類Dev

メソッドのパラメータとしてlist <T *>を使用するにはどうすればよいですか?

分類Dev

mp2t.af.pcrの値をTsharkフィールドとして使用するにはどうすればよいですか?

分類Dev

IEnumerable(型なし)をIQueryable <T>に変換するにはどうすればよいですか?

分類Dev

Type [T]でT = TypeVar( 'T'、bound = ...)を正しく使用するにはどうすればよいですか?

分類Dev

ILogger <T> .Log拡張メソッドがMoqを使用して呼び出されたことを確認するにはどうすればよいですか?

分類Dev

uint32_tマスクをポインター変数として保存するにはどうすればよいですか?

分類Dev

構造体でRc <RefCell <T >>のデータ型を使用するにはどうすればよいですか?

分類Dev

mpz_t番号がGMPを使用して初期化されているかどうかを確認するにはどうすればよいですか?

Related 関連記事

  1. 1

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

  2. 2

    型引数がNULL可能できるようにすることを<どれT>とないKClass <T>なぜKClassはKClassとして宣言されています

  3. 3

    &HashSet <&T>をIntoIterator <Item =&T>として使用するにはどうすればよいですか?

  4. 4

    ジェネリック型T []を引数として持つメソッドを呼び出すにはどうすればよいですか?

  5. 5

    T-SQLを使用して、長さが異なる複数の親子関係を組み合わせるにはどうすればよいですか?

  6. 6

    Arc <T>をTと比較するにはどうすればよいですか?

  7. 7

    Moq:Action <T>引数が空の関数であることを確認するにはどうすればよいですか?

  8. 8

    synを使用しているときにOption <T>からTを取得するにはどうすればよいですか?

  9. 9

    トーチスクリプト拡張を構築しようとすると、無効な型になります。整数型引数型エラーとしてサポートされているのはint64_tとboolのみです。

  10. 10

    Roslynを使用してIEnumerable <T>の基になる型を取得するにはどうすればよいですか?

  11. 11

    TObjectをTObjectList <T>としてキャストするにはどうすればよいですか?

  12. 12

    新しいレーンを気にしないときに、int32x2_tをclang / AArch64のNEON組み込み関数を使用してint32x4_tに拡張するにはどうすればよいですか?

  13. 13

    static_cast <T>を関数として渡すにはどうすればよいですか?

  14. 14

    sshの-tフラグを指定してgcloudcompute sshを使用するにはどうすればよいですか?

  15. 15

    Rでglm()を使用してt分布を使用するにはどうすればよいですか?

  16. 16

    size_tと他の整数型を一緒に正しく使用するにはどうすればよいですか?

  17. 17

    XSL-T 1.0を使用して、重複ノードに対して異なる出力を生成するにはどうすればよいですか?

  18. 18

    Robo3Tを使用してAWSDocumentdbに接続するにはどうすればよいですか?

  19. 19

    Tを定義していない別のアクターのハンドラーからMyActor :: from_registry()を呼び出しているときに、型アノテーションを判別するにはどうすればよいですか?

  20. 20

    Lazy <T>と一緒に使用した場合、MemoryCacheから例外を識別して排除するにはどうすればよいですか?

  21. 21

    T-SQLを使用してURLからXMLを読み取るにはどうすればよいですか?

  22. 22

    メソッドのパラメータとしてlist <T *>を使用するにはどうすればよいですか?

  23. 23

    mp2t.af.pcrの値をTsharkフィールドとして使用するにはどうすればよいですか?

  24. 24

    IEnumerable(型なし)をIQueryable <T>に変換するにはどうすればよいですか?

  25. 25

    Type [T]でT = TypeVar( 'T'、bound = ...)を正しく使用するにはどうすればよいですか?

  26. 26

    ILogger <T> .Log拡張メソッドがMoqを使用して呼び出されたことを確認するにはどうすればよいですか?

  27. 27

    uint32_tマスクをポインター変数として保存するにはどうすればよいですか?

  28. 28

    構造体でRc <RefCell <T >>のデータ型を使用するにはどうすればよいですか?

  29. 29

    mpz_t番号がGMPを使用して初期化されているかどうかを確認するにはどうすればよいですか?

ホットタグ

アーカイブ