instanceof
Оператор требует левого операнда быть типа Любыми, типа объекта, или типа параметра типа, а правый операнда , чтобы иметь типа любых или подтип «Function» типа интерфейса. Результат всегда имеет тип логического примитива.
Так что вы могли бы использовать
mySprite instanceof Sprite;
Обратите внимание, что этот оператор также есть в ActionScript, но его там больше не следует использовать:
Оператор is, новый для ActionScript 3.0, позволяет проверить, является ли переменная или выражение членом данного типа данных. В предыдущих версиях ActionScript оператор instanceof предоставлял эту функцию, но в ActionScript 3.0 оператор instanceof не должен использоваться для проверки принадлежности к типу данных. Оператор is следует использовать вместо оператора instanceof для ручной проверки типа, поскольку выражение x instanceof y просто проверяет цепочку прототипов x на наличие y (а в ActionScript 3.0 цепочка прототипов не дает полной картины иерархия наследования).
TypeScript instanceof
разделяет те же проблемы. Поскольку это язык, который все еще находится в стадии разработки, я рекомендую вам высказать предложение о такой возможности.
Смотрите также:
Std.is(pet, Fish)
, которая работает с типами, интерфейсами и т. Д.isFish
себе предикат, который создается, и его тело не должно быть предикатом с одной строкой. Преимущество этого состоит в том, что компилятор понимает во время компиляции соответствующие возможные функции, но ваш код внутриisFish
выполняется во время выполнения. Вы могли бы даже сделать так, чтобы защита содержалаinstanceof
оператор, напримерreturn pet instanceof Fish
(предполагая, что это класс, а не интерфейс), но это было бы ненужным, так как компилятор понимаетinstanceof
напрямую.(pet as Fish)
так как tslinter будет жаловаться(<Fish>pet)
. Смотрите документ tslintВы можете использовать
instanceof
оператор для этого. От MDN:Если вы не знаете, что такое прототипы и цепочки прототипов, я настоятельно рекомендую поискать их. Также вот пример JS (TS работает аналогично), который может прояснить концепцию:
Цепочка прототипов в этом примере:
animal> Animal.prototype> Object.prototype
источник