2016-11-25 10 views
5

В следующем коде компилятор Typcript говорит, что свойство doit не существует в типе 'never'. Может ли это быть ошибкой компилятора?Свойство 'x' не существует в типе 'never'

class X { 
    public foo(): void { 
     if (this instanceof Y) { 
     } else { 
      this.doit(); 
     } 
    } 

    private doit(): void { 
    } 
} 

class Y extends X { 
} 

Я нашел следующий обходной путь:

const temp = (this instanceof Y); 
if (temp) { 
} else { 
    this.doit(); 
} 

компилятор не имеет каких-либо проблем с этим эквивалентный код, который снова приводит меня подозревать, есть ошибка компилятора здесь.

ответ

1

Да, это, кажется, ошибка: InstanceOf incorrectly narrow when two type extends same base class.

Но, независимо от того, в чем смысл того, что вы делаете?
Если вы хотите foo вести себя по-разному в случаях Y, то почему бы не заменить его в Y:

class Y extends X { 
    public foo(): void { 
     ... 
    } 
} 

И если doit нужен только в Y случаях она должна быть в Y, если это необходимо в обоих он может защищаться в X.

+0

Это хак, необходимый для устаревших причин, то есть исходный код Y не может быть изменен. – user2486738

Смежные вопросы