Проверка типа класса с помощью TypeScript
Я очень рад TypeScript, Так что я начал играть с ним. Как разработчик Actionscript, он делает Javascript менее сложным.
однако в Actionscript можно проверить тип во время выполнения с помощью оператор:
var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite); // true
trace(mySprite is DisplayObject);// true
trace(mySprite is IEventDispatcher); // true
можно ли определить, является ли переменная (extends или) определенным классом или интерфейсом с TypeScript? Я не мог найти ничего об этом в языковых спецификациях, он должен быть там при работе с классами/интерфейсами.
обновление: несколько лет спустя. Я очень быстро сбросил TypeScript и начал использовать Haxe который компилируется в отличный JavaScript и имеет реальную проверку типов, которая работает на классах, интерфейсах и т. д. Также имеет удаление мертвого кода, лучшие перечисления, абстрактные типы и функции времени компиляции (макросы), также компилируется в один файл, поэтому не требуется сложная система сборки пакетов.
2 ответов:
4.19.4 оператор instanceof
The
instanceofоператор требует, чтобы левый операнд имел тип Any, тип объекта или тип параметра типа, а правый операнд имел тип Any или подтип типа интерфейса "функция". Результат всегда имеет тип логического примитива.так что вы могли бы использовать
mySprite instanceof Sprite;обратите внимание, что этот оператор также находится в ActionScript, но он не должен использоваться там больше:
оператор is, который является новым для ActionScript 3.0, позволяет проверить, является ли переменная или выражение членом данного типа данных. В предыдущих версиях ActionScript оператор instanceof предоставлял эту функцию, но в ActionScript 3.0 оператор instanceof не должен использоваться для проверки принадлежности к типу данных. Оператор is должен использоваться вместо оператора instanceof для ручной проверки типа, поскольку выражение x instanceof y просто проверяет цепочку прототипов x на наличие y (и в ActionScript 3.0 цепочка прототипов не дает полной картины иерархии наследования).
машинопись-х
instanceofразделяет те же проблемы. Поскольку это язык, который все еще находится в разработке, я рекомендую вам изложить предложение такого объекта.Читайте также:
- MDN:instanceof
TypeScript имеют способ проверки типа переменной во время выполнения. Вы можете добавить функцию проверки, которая возвращает предикат типа. Таким образом, вы можете вызвать эту функцию внутри оператора if и убедиться, что весь код внутри этого блока безопасен для использования в качестве типа, который вы думаете.
пример из TypeScript docs:
function isFish(pet: Fish | Bird): pet is Fish { return (<Fish>pet).swim !== undefined; } // Both calls to 'swim' and 'fly' are now okay. if (isFish(pet)) { pet.swim(); } else { pet.fly(); }Смотрите больше на: https://www.typescriptlang.org/docs/handbook/advanced-types.html
Comments