Construcciones
Template literal types
Interpolación de cadenas a nivel de tipos — y, leída al revés, encaje de patrones sobre cadenas.
Qué es
Construir cadenas es la mitad obvia. La mitad que importa es que la misma sintaxis funciona en una cláusula `extends` con `infer`, lo que convierte una plantilla en un analizador: `S extends \`${infer Head}.${infer Rest}\`` corta en el primer punto. Todo tipo de ruta y todo conversor de caja del archivo es esa única idea repetida.
Ejemplos
Handler<AppEvent>
→"onClick" | "onFocus"Split<'a.b'>→["a", "b"]Encaje desde la izquierda, el más corto primero — así `H` es un segmento y `R` todo lo que sigue.
Split<'plain'>→["plain"]
Cada tipo resuelto de arriba lo imprimió TypeScript 5.9.3, no se escribió a mano.
Lo que no hace
- No puede encajar de forma voraz ni hacia atrás. La inferencia toma siempre la coincidencia más corta desde la izquierda, así que cortar por el *último* separador necesita recursión, no un patrón más listo.
- No se mantiene finito gratis. Interpolar dos uniones las multiplica, y unas pocas uniones de pocos miembros superarán el límite del compilador sobre el tamaño de una unión.
Conclusión
Una plantilla en posición de tipo construye; la misma plantilla en una cláusula `extends` desarma. Aprender a leerlas en el segundo sentido es lo que lo desbloquea.