Проверка типа класса с помощью 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 разделяет те же проблемы. Поскольку это язык, который все еще находится в разработке, я рекомендую вам высказать предложение о таком объекте.

Читайте также:


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