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