Przejdź do treści
webtype.orgDwanaście zagadnień · 1/12

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.