Машинописные дженерики. Не удается передать экземпляр B аргументу a: T, где T расширяет B. Почему?
У меня урок:
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
а реле по наследству?
1 ответ
Решение
Вы получаете ошибку, потому что кто-то может использовать X<T>
где T
это подкласс B
, а потом this.p.a
может быть B
это не T
, Чтобы узнать, как лучше всего устранить ошибку, нам нужно больше узнать о том, чего вы пытаетесь достичь.