Проверка типа класса с помощью 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 и имеет реальную проверку типов, которая работает на классах, интерфейсах и т. д. Также имеет удаление мертвого кода, лучшие перечисления, абстрактные типы и функции времени компиляции (макросы), также компилируется в один файл, поэтому не требуется сложная система сборки пакетов.


720   2  

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

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

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

    Ничего не найдено.