Saltar al contenido

    ↑↓ mover · ⏎ abrir · esc cerrar

    TS2344

    No satisface la restricción

    Type 'number' does not satisfy the constraint 'string'.

    Las palabras del propio compilador. Sin traducir — es la cadena que pegaste en el buscador.

    Un argumento de tipo fue rechazado en la puerta. El genérico dijo qué aceptaría, y esto no lo es.

    Reproducción

    type OnlyStrings<T extends string> = T
    
    type Bad = OnlyStrings<number>

    La compilación afirma que esto emite exactamente este código.

    Por qué lo dice el compilador

    `extends` en una lista de parámetros no es herencia ni una sugerencia — es la comprobación del argumento. `T extends string` significa «lo que llegue debe ser asignable a `string`», y `number` no lo es. El error nombra primero el argumento y después la restricción, y conviene leerlo con cuidado: te dice qué lado equivocaste.

    Arreglos

    1. 01
      type OnlyStrings<T extends string> = T
      
      type Good = OnlyStrings<'hello'>

      Pasa algo que encaje. Un tipo literal de cadena es asignable a `string`, así que entra sin problema.

    2. 02
      type Anything<T extends string | number> = T
      
      type AlsoGood = Anything<number>

      O amplía la restricción, si el genérico de verdad admite más de lo que declara. Ampliarla porque el error molesta, y no porque el cuerpo sea seguro, solo desplaza el fallo hacia dentro.

    Conclusión

    La restricción es un contrato que el genérico escribió sobre sí mismo. Lee el cuerpo antes de aflojarla — la restricción suele ser estructural.

    Adónde ir después

    Errores