Машинописные дженерики. Не удается передать экземпляр B аргументу a: T, где T расширяет B. Почему? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть класс:

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 Ответ

0 голосов
/ 29 августа 2018

Вы получаете ошибку, потому что кто-то может использовать X<T>, где T - это подкласс B, а затем this.p.a может быть B, а не T. Чтобы узнать, как лучше всего устранить ошибку, нам нужно больше узнать о том, чего вы пытаетесь достичь.

...