打字稿泛型。无法将 B 的实例传递给参数 a:T,其中 T 扩展 B。为什么?
Typescript generics. Can't pass instance of B to a argument a: T where T extends B. Why?
我有 class:
class X<T extends B> [...]
// this.p.a :: B | null
methodA(a: T):void {[...]}
methodB(): void {
if(this.p.a){ // :: B
this.methodA(this.p.a) // Error
如您所见,我希望 T
可以是任何类型,只要它扩展 B
,然后我将一些 属性 传递给它输入 B
。但是 Typescript 无法推断 B
是满足上述代码段最后一行中的 T
类型参数的类型。
错误信息:
error TS2345: Argument of type 'B' is not assignable to parameter of type 'T'.
为什么这不起作用?
我是否应该将任何有问题的类型声明更改为 B
而不是 T
并继承继承?
您收到错误是因为有人可能会使用 X<T>
,其中 T
是 B
的子类,然后 this.p.a
可能是 B
那不是 T
。要了解解决错误的最佳方法,我们需要更多地了解您要实现的目标。
我有 class:
class X<T extends B> [...]
// this.p.a :: B | null
methodA(a: T):void {[...]}
methodB(): void {
if(this.p.a){ // :: B
this.methodA(this.p.a) // Error
如您所见,我希望 T
可以是任何类型,只要它扩展 B
,然后我将一些 属性 传递给它输入 B
。但是 Typescript 无法推断 B
是满足上述代码段最后一行中的 T
类型参数的类型。
错误信息:
error TS2345: Argument of type 'B' is not assignable to parameter of type 'T'.
为什么这不起作用?
我是否应该将任何有问题的类型声明更改为 B
而不是 T
并继承继承?
您收到错误是因为有人可能会使用 X<T>
,其中 T
是 B
的子类,然后 this.p.a
可能是 B
那不是 T
。要了解解决错误的最佳方法,我们需要更多地了解您要实现的目标。