Przejdź do treści
webtype.orgTemplate literal types

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Konstrukcje

    Template literal types

    Interpolacja tekstu na poziomie typów — a czytana wstecz, dopasowywanie wzorca do tekstu.

    Czym jest

    Budowanie tekstów to połowa oczywista. Połowa istotna jest taka, że ta sama składnia działa w klauzuli `extends` z `infer`, co zamienia szablon w parser: `S extends \`${infer Head}.${infer Rest}\`` rozcina na pierwszej kropce. Każdy typ ścieżki, trasy i konwertera wielkości w archiwum to ta jedna myśl powtórzona.

    Przykłady

    • Handler<AppEvent>
      "onClick" | "onFocus"
    • Split<'a.b'>
      ["a", "b"]

      Dopasowanie od lewej, najkrótsze najpierw — więc `H` to jeden segment, a `R` cała reszta.

    • Split<'plain'>
      ["plain"]

    Każdy rozwinięty typ powyżej wypisał TypeScript 5.9.3, nie ręka człowieka.

    Czego nie robi

    • Nie potrafi dopasowywać zachłannie ani od tyłu. Wnioskowanie zawsze bierze najkrótsze dopasowanie od lewej, więc rozcięcie na *ostatnim* separatorze wymaga rekurencji, a nie sprytniejszego wzorca.
    • Nie pozostaje skończone samo z siebie. Interpolacja dwóch unii mnoży je, a kilka unii po kilka składników przekroczy limit kompilatora na rozmiar unii.

    Wniosek

    Szablon w pozycji typu buduje; ten sam szablon w klauzuli `extends` rozbiera. Nauczenie się czytania ich w drugą stronę to moment przełomu.