Проверка типа класса с помощью 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 и начал использовать вызов который компилируется в отличный JavaScript и имеет реальную проверку типов, которая работает на классах, интерфейсах и т. д. Также имеет удаление мертвого кода, лучшие перечисления, абстрактные типы и функции времени компиляции (макросы), также компилируется в один файл, поэтому не требуется сложная система сборки пакетов.
2 ответов
4.19.4 оператор instanceof
на требует, чтобы левый операнд имел тип Any, тип объекта или тип параметра типа, а правый операнд имел тип Any или подтип типа интерфейса "функция". Результат всегда имеет логический примитивный тип.
можно использовать
mySprite instanceof Sprite;
обратите внимание, что этот оператор также находится в ActionScript, но он не должен использоваться там больше:
новый для ActionScript 3.0 оператор is позволяет проверить, является ли переменная или выражение членом данного типа данных. В предыдущих версиях ActionScript эту функцию предоставлял оператор instanceof, но в ActionScript 3.0 оператор instanceof не должен использоваться для проверки принадлежности к типу данных. Оператор is следует использовать вместо оператора instanceof для ручной проверки типа, поскольку выражение x instanceof y просто проверяет цепочку прототипов x на наличие y (а в ActionScript 3.0 цепочка прототипов не дает полной картины иерархии наследования).
машинопись-х instanceof
разделяет те же проблемы. Поскольку это язык, который все еще находится в разработке, я рекомендую вам высказать предложение о таком объекте.
Читайте также:
- MDN:instanceof
TypeScript имеют способ проверки типа переменной во время выполнения. Вы можете добавить функцию проверки, которая возвращает предикат типа. Поэтому вы можете вызвать эту функцию внутри оператора if и убедиться, что весь код внутри этого блока безопасен для использования в качестве типа, который вы думаете.
пример из документов TypeScript:
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