Класс проверка типа с машинописью

голоса
107

Я очень рад машинопись , так что я начал играть с ним. Как разработчик Actionscript, он делает Javascript менее трудно.

Однако, в Actionscript можно проверить тип во время выполнения с помощью оператора является :

var mySprite:Sprite = new Sprite(); 
trace(mySprite is Sprite); // true 
trace(mySprite is DisplayObject);// true 
trace(mySprite is IEventDispatcher); // true

Можно ли обнаружить, если переменная (удлиняется или) определенный класс или интерфейс с машинопись? Я не мог найти ничего об этом в языковых спецификациях, он должен быть там при работе с классами / интерфейсами.


Обновление: Несколько лет спустя. Я упал машинопись очень быстро и начать использовать Haxe , который компилирует отличное JavaScript и имеет реальную проверку типов , который работает на классах, интерфейсы и т.д. Также есть удаление мертвого кода, лучше перечисления, абстрактные типы и скомпилированы функция (макросы), а также компилирует в один файл так не требуется сложная система расслоения сборки.

Задан 08/10/2012 в 21:47
источник пользователем
На других языках...                            


2 ответов

голоса
142

4.19.4 Оператор InstanceOf

instanceofОператор требует , чтобы левый операнд быть типа, любой тип объекта, или типа параметра типа, а правый операнд иметь тип любого или подтипа «Function» типа интерфейса. Результат всегда булевой примитивного типа.

Таким образом, вы можете использовать

mySprite instanceof Sprite;

Обратите внимание, что этот оператор также в ActionScript, но он не должен быть использован там больше:

Оператор, который является новым для ActionScript 3.0, позволяет проверить переменная или выражение, является ли членом данного типа данных. В предыдущих версиях ActionScript, оператор InstanceOf при условии, эти функциональные возможности, но в ActionScript 3.0 оператор InstanceOf не следует использовать для проверки членства типа данных. Является оператор должен быть использован вместо оператора InstanceOf для проверки типа вручную, поскольку выражение х InstanceOf у проверяет только цепочку прототипа х для существования у (а в ActionScript 3.0 цепочка прототипа не дает полную картину иерархия наследования).

Машинопись в instanceofакции одни и те же проблемы. Как это язык , который до сих пор в его развитии я рекомендую вам сформулировать предложение такого объекта.

Смотрите также:

Ответил 08/10/2012 в 21:54
источник пользователем

голоса
8

Машинопись есть способ проверки типа переменной во время выполнения. Вы можете добавить проверяющую функцию , которая возвращает тип предикат . Таким образом , вы можете вызвать эту функцию внутри, если заявление, и быть уверенным , что весь код внутри этого блока является безопасным для использования в качестве типа вы думаете , что это.

Пример из машинописи документы:

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

Ответил 21/11/2016 в 10:42
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more