TypeScript reporta este error cuando un argumento de tipo no satisface las restricciones declaradas para un parámetro de tipo genérico. Las restricciones se declaran con 'extends' y limitan qué tipos pueden usarse como argumentos de tipo.
Por qué ocurre
- •Acceder a una propiedad en un tipo genérico T sin restringir T para que tenga esa propiedad.
- •Pasar un argumento de tipo que no implementa la interfaz requerida.
- •Usar tipos condicionales o mapeados que requieren restricciones específicas.
Ejemplos
Código que causa el error
function getLength<T>(value: T): number {
return value.length; // T has no 'length' constraint
}Error en la terminal
error TS2339: Property 'length' does not exist on type 'T'.
Cómo solucionarlo
Agrega una restricción extends al parámetro genérico: <T extends SomeInterface>. Estrecha la restricción a la forma mínima requerida. Si la función debe aceptar cualquier tipo, evita acceder a propiedades específicas y usa guardas de tipo en su lugar.
Código corregido
function getLength<T extends { length: number }>(value: T): number {
return value.length; // works for arrays, strings, etc.
}Errores relacionados
¿Listo para practicar tu inglés en el trabajo?
Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.
Prueba Lingua-e gratis