#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 в другом месте, вместо того, чтобы запускать волшебные строки. И так ли это на самом деле? Я должен буду разобраться с этим.