Saltar al contenido
Conservar literales con un genérico const

    ↑↓ mover · ⏎ abrir · esc cerrar

    Patrones

    ¿Cómo hago que un ayudante infiera una tupla literal sin exigir `as const`?

    Marca el parámetro como `const`; la inferencia preferirá formas literales readonly frente a arrays y primitivos ampliados.

    La receta

    function tuple<const T extends readonly unknown[]>(...values: T): T {
      return values
    }
    
    const statuses = tuple('idle', 'loading', 'done')
    const point = tuple(10, 20)

    La compilación compila esto y comprueba cada resultado de abajo.

    Cómo funciona

    1. 01
      const T extends readonly unknown[]

      `const` cambia la preferencia de inferencia y la restricción readonly aporta un destino estrecho compatible.

    2. 02
      ...values: T

      El parámetro rest registra cada argumento como una posición de la tupla.

    Lo que obtienes

    Dónde falla

    La inferencia const es superficial y basada en preferencia. Los valores ya guardados en variables ampliadas siguen ampliados, y restricciones mutables pueden devolver arrays mutables.

    Conclusión

    Usa parámetros de tipo const en límites de API donde convenga precisión literal sin sintaxis adicional.

    Véase también

    Patrones