Zagadnienie 1 z 12
Aliasy typów
Alias typu nadaje nazwę typowi, który mógłbyś napisać wprost. To wszystko, co robi — nie tworzy nowego typu, tylko krótszy sposób odwołania się do istniejącego. Każda zagadka na tej stronie jest ostatecznie jednym aliasem typu — dlatego właśnie tu zaczyna się wspinaczka.
Alias jest przezroczysty
type ID = string // These two signatures are the same type, not merely compatible ones. declare function save(id: ID): void declare function save(id: string): void
Kompilator podstawia alias wszędzie tam, gdzie się pojawia. `ID` i `string` są wymienne w każdej pozycji, a komunikat błędu może wypisać dowolny z nich — zależnie od tego, który jest krótszy.
To właśnie odróżnia alias od klasy czy enuma, które tworzą nowe typy. Jeśli chcesz dwóch rzeczy o kształcie łańcucha, których kompilator nie pozwoli pomylić, alias tego nie da — potrzebujesz typu brandowanego.
Aliasy mogą nazwać wszystko
type Point = { x: number; y: number } type Direction = 'up' | 'down' type Handler = (event: string) => void type Pair = [number, number]
Nazwać można unie, funkcje, krotki i kształty obiektów. `interface` opisuje wyłącznie obiekt — i to praktyczny powód, dla którego kod na poziomie typów sięga zwykle po `type`.
Najczęstsza błędna odpowiedź
type Meters = number type Feet = number declare function jump(height: Meters): void jump(12 as Feet) // no error — both are just number
Aliasy nie tworzą odrębnych typów, więc to kompiluje się bez oporu, a jednostki po cichu się nie zgadzają. Nazwanie typu dokumentuje intencję dla czytelnika; kompilatorowi niczego nie narzuca.
Do zapamiętania
Alias to przezwisko, a nie nowy byt. Wszystko dalej w tej ścieżce to to samo przezwisko z doczepionymi parametrami.