gpt4 book ai didi

javascript - 如何使用类型不同于 T 的 Proxy 作为参数?

转载 作者:搜寻专家 更新时间:2023-10-30 21:22:10 26 4
gpt4 key购买 nike

我处于一种情况,我想使用 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)

因为它会产生以下错误:

Argument of type 'Foo[]' is not assignable to parameter of type '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();

关于javascript - 如何使用类型不同于 T 的 Proxy<T> 作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50602903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com