Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

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