说我有一个简单的类型,例如:
interface X<A, B> {
getA(): A;
acceptB(b: B);
}
和一个采用任何类型的X
的函数:
function fun<V extends X<any, any>> (v: V) {
v.acceptB(v.getA());
}
以上已编译,因为已使用类型参数X
实例化了泛型类型any, any
,但这不是类型安全的,因为A
的实际类型可能不是子类型B
的类型。
在Java之类的语言中,存在通配符类型具有不同的标识,以便人们可以执行X<?, ?>
,并且由于?-1
不是?-2
的子类型,以上内容将无法编译。
在TypeScript中,可以执行以下操作:function fun<A, B, V extends X<A, B>> (v: V) {
,但是您可以看到,如果使用带有许多类型参数的中央泛型类型,则可以很快解决这一问题。
因此,有没有更好的方法来模拟通配符行为?