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'のパラメーターに割り当てることができません。
これを達成する方法はありますか; 型チェックを失うことなく?
既存の定義を変更する必要はありません。単にそれらを拡張することができます。
モジュールシステムを使用している場合は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]
コメントを追加