Generics Typescript-是否可以将泛型类型作为参数而不使用泛型元素?
我希望能够在没有泛型的情况下访问泛型类型。。。。可能吗 例如,如果我有一个通用接口Generics Typescript-是否可以将泛型类型作为参数而不使用泛型元素?,generics,typescript,proxy,Generics,Typescript,Proxy,我希望能够在没有泛型的情况下访问泛型类型。。。。可能吗 例如,如果我有一个通用接口 interface GenIntf<T1, T2> { someGenFunct(param: P1): T2; } 所以在这里,我不想让工厂知道任何关于GenIntf的泛型类型的信息,我只想确保提供了GenIntf的实现。但除非我把它改成 create<A, B>(genIntf: GenIntf<A, B>) { create(genIntf:genIntf){
interface GenIntf<T1, T2> {
someGenFunct(param: P1): T2;
}
所以在这里,我不想让工厂知道任何关于GenIntf的泛型类型的信息,我只想确保提供了GenIntf的实现。但除非我把它改成
create<A, B>(genIntf: GenIntf<A, B>) {
create(genIntf:genIntf){
但是抽象地处理这一点就更困难了。您可以在类型参数中使用
any
类型:
class ProxyFactory {
create(genIntf: GenIntf<any, any>): any {
return new Proxy(genIntf.someGenFunct, {});
}
}
默认类型参数
中,您可以考虑使用默认类型参数:
interface GenIntf<T1 = any, T2 = any> {
someGenFunct(param: T1): T2;
}
接口GenIntf{
someGenFunct(参数:T1):T2;
}
但这会影响接口本身,这可能不是您想要的。我一直在尝试放置?相反,编译器compiler complainedI可以将
any
理解为类型参数,但它们应该是{}
返回类型注释完全错误-1@AluanHaddad为什么返回类型是错误的?它是从问题中复制过来的。也许提问者真的希望返回类型是any
…它毕竟是显式输入的。而且,为什么它应该是{}
而不是any
?询问者要求它与泛型类型中指定的任何类型兼容,并且any
满足该要求。{}
是编译器在默认情况下无法推断泛型类型参数时使用的。返回类型是个问题,你说得对。我错过了。我将取消对它的否决票。@AluanHaddad是的,我同意。在这种特定情况下,以及在大多数情况下,最好根本不使用any
。有少数情况下any
很有用,但非常罕见……我认为如果使用它,它的作用域最多应该限制在函数的作用域内,以防止出现错误。typescript 2.3目前正在候选发行版(npm Itypescript@2.3
)将允许您指定默认值,如接口GenInft{someGenFunct(参数:P1):T2;}
。
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);
interface GenIntf<T1 = any, T2 = any> {
someGenFunct(param: T1): T2;
}