невозможно получить instanceof класса, если у него есть свойство $inject (Typescript, Angular 1)

#javascript #angularjs #typescript

#javascript #angularjs #typescript

Вопрос:

Я пытаюсь использовать защиту типов Typescript, например,

 if ( x instanceof class) {
    //do thing;
}
  

У меня есть класс, который выдает эту ошибку, когда я пытаюсь создать для него instanceof:
The right-hand side of an instanceof expression must be of type 'any' or of a type assignable to the 'Function' interface type.

У моего класса есть static $inject: Array<any> = ['dependencies']; свойство для работы с Angular 1 . Когда я удаляю это свойство (или даже просто переименовываю его в inject (без знака $), я могу создать instanceof .

Кто-нибудь может пролить свет на эту проблему?

Редактировать: соответствующий код:

Контроллер:

 export class Controller {
    static $inject: Array<any> = ['$q', '$timeout'];

    constructor (private $q, private $timeout) {...}
}
  

Класс:

 class Selector {

    constructor(private ctrl: Controller | Controller1) {
        if(ctrl instanceof Controller) { 
            // This instanceof throws the aforementioned error
            // Renaming $static to static in Controller fixes the problem, 
            // but then the controller doesn't function
        } else {
            ...
        }
    }
}
  

Спасибо

Комментарии:

1. можете ли вы опубликовать код для класса / контроллера?

2. Опубликованный соответствующий код

3. Я не знаю, почему компилятор выдает эту ошибку, но чтобы исправить ее, просто измените $inject тип на Array<string> или string[] .

4. Также кажется, что это нормально работает в typescript 2, так что, возможно, это ошибка в предыдущей версии.

5. Это массив <any>, так что я могу запустить Controller.$inject.concat(Controller) , чтобы зарегистрировать его в angular в другом месте, вместо того, чтобы запускать волшебные строки. И так ли это на самом деле? Я должен буду разобраться с этим.