Przejdź do treści
webtype.orgwebtype.org

    ↑↓ 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.

    Prześledź typSprawdzone kompilatorem
    WyrażenieID
    Rozwija się dostring
    WyrażenieID[]
    Rozwija się dostring[]

    Zmienia się nazwa, nie typ. Alias nie tworzy odrębnej tożsamości.

    Definicja typu
    type ID = string

    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.