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.