Przejdź do treści
webtype.orgwebtype.org

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