Kilka uwag po “zeskanowaniu” najnowszej specyfikacji –;)
Funkcje generyczne
interface Comparable<T> { localeCompare(other: T): number; }
function compare<T extends Comparable<T>>(x: T, y: T): number { if (x == null) return y == null ? 0 : -1; if (y == null) return 1; return x.localeCompare(y); }
class Person { name: string; localeCompare(other: Person) { return compare(this.name, other.name); } }
Wywołanie funkcji generycznej - typ jest podawany jawnie lub - jeśli jest to możliwe - może być wnioskowany z typów argumentów przekazanych do funkcji (jak powyżej w funkcji compare)
Interfejsy rozszerzające klasy
Interfejs rozszerzający klasę dziedziczy po niej wszystkie elementy (także prywatne!), ale bez ich implementacji. Przy prywatnych elementach bazowej klasy interfejs może być implementowany przez tą klasę lub klasy, które po niej dziedziczą.
class Control { private state: any; }
interface SelectableControl extends Control { select(): void; }
Podtypem SelectableControl jest klasa Button:
class Button extends Control { select() { } }
ale nie są nimi klasy Image i Location:
class Image extends Control { }
class Location { select() { } }
Typy wyliczeniowe
Podtypy number. Definicji:
enum Color { Red, Green, Blue }
odpowiada zmienna Color typu:
var Color: { [x: number]: string; Red: Color; Green: Color; Blue: Color; };
Elementami enum mogą być stałe lub elementy wyliczane! Wyrażenia wyliczające mogą zwracać typy: any, number, enum.
enum Test { A, B, C = 10, D, E = Math.floor(Math.random() * 1000) } // 0, 1, 10, wartość wyliczana
Wartości wyliczane mogą być referencjami na zadeklarowane już elementy:
enum Style { None = 0, Bold = 1, Italic = 2, Underline = 4, Emphasis = Style.Bold | Style.Italic, Hyperlink = Style.Bold | Style.Underline }
W przypadku wielu deklaracji w każdej z nich jest ustalany numer dla pierwszego elementu, nie ma kontynuowania numeracji.
Brak komentarzy:
Prześlij komentarz