Typedef — это конструкция, определяющая типы для проверки типов анонимных типов. Во завернул! Уж не знаю, как это можно объяснить нормальным языком. Это что-то вроде интерфейсов, только там описаны свойства объекта, а не методы. Например, если мы опишем тип таким образом:
typedef Human = { numHeads : Int, numHands : Int, numLegs : Int }
то такому типу будет соответсвовать любой объект, имеющий свойства numHeads, numHands, numLegs типа Int. И любой такой объект мы можем передать в данной ситуации:
typedef Human = { numHeads : Int, numHands : Int, numLegs : Int }
class Alien
{
public var numHeads : Int;
public var numHands : Int;
public var numLegs : Int;
public function new()
{
this.numHeads = 2;
this.numHands = 8;
this.numLegs = 3;
}
}
function greet(man : Human):Void
{
}
var dangerousCreature:Alien = new Alien();
greet(dangerousCreature);
Здесь функция greet без проблем примет переменную типа Alien, потому что она соответствует типу Human. В отличие от интерфейсов, в классе Alien не нужно указывать, что он реализует тип Human.
Создать экземпляр typedef можно следующим образом:
var goodFellow : Human = { numHeads : 1, numHeands : 2, numLegs : 2 };
Таким образом typedef может заменить собой небольшй класс, предоставляя более лакончный синтаксис. Конечно, это удобно, когда параметров не слишком много, потому что их нужно все перечислять при создании каждого экземпляра.
typedef также можно использовать для создания синонимов для существующих типов. Например:
enum ThreeState
{
Checked;
Unchecked;
Indeterminated;
}
class Person
{
public var name : String;
public function new() { }
}
typedef GenericFunction<T> = Void -> T
typedef IntArray = Array<Int>
typedef P = Person
typedef TS = ThreeState
typedef могут содержать функции:
typedef B = {
x : Float,
y : Float
say : String -> String
}
могут описывать шаблоны типов:
typedef Leaf<T> = {
parent : Node<T>,
data : T
}
typedef существует только во время компиляции и используются для проверки типов. В результирующем swf-файле их нет. typedef предоставляет простой и лаконичный синтаксис, заменяет интерфейсы и даже небольшие классы. Синонимы типов тоже полезны, дальше мы увидим, как это может облегчить нам жизнь.