我希望能够在没有泛型的情况下访问泛型类型....这可能吗?
如果我有通用接口,例如
interface GenIntf<T1, T2> {
someGenFunct(param: P1): T2;
}
我有一个工厂类,其工作是创建代理someGenFunct:
class ProxyFactory {
create(genIntf: GenIntf): any {
return new Proxy(genIntf.someGenFunct, {});
}
}
所以在这里我不希望工厂知道关于GenIntf的泛型类型的任何信息,我只想确保提供GenIntf的实现。但除非我将其改为
,否则这将失败create<A, B>(genIntf: GenIntf<A, B>) {
但是这更难以抽象地使用。
答案 0 :(得分:0)
您可以在类型参数中使用any
类型:
class ProxyFactory {
create(genIntf: GenIntf<any, any>): any {
return new Proxy(genIntf.someGenFunct, {});
}
}
旁注:您可能不希望使用any
返回类型,因为应该避免它们以防止错误地使用返回值。我复制并将其保留为问题中的代码。
总的来说,最好是按照你在问题中建议的那样做:
class ProxyFactory {
create<A, B>(genIntf: GenIntf<A, B>) {
return new Proxy(genIntf.someGenFunct, {});
}
}
const genIntf = ...;
const proxyFactory = new ProxyFactory();
const proxy = proxyFactory.create(genIntf);
默认类型参数
在TS 2.3+中,您可以考虑使用默认类型参数:
interface GenIntf<T1 = any, T2 = any> {
someGenFunct(param: T1): T2;
}
但是这会影响界面本身,这可能不是你想要的。