我上课:
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
并继承?
答案 0 :(得分:1)
您收到一个错误消息,因为有人可能使用X<T>
,其中T
是B
的子类,然后this.p.a
可能是一个B
不是T
。要知道解决错误的最佳方法,我们需要更多地了解您要实现的目标。