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

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    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.

    Ćwiczenie

    Nadaj temu typowi obiektu nazwę, aby `Point` do niego odsyłał.

    Spróbuj

    1
    • Point
      { x: number; y: number }

    Do zapamiętania

    Alias to przezwisko, a nie nowy byt. Wszystko dalej w tej ścieżce to to samo przezwisko z doczepionymi parametrami.