Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

166
Vistas
Pasar tipo genérico a objeto dentro del método

Me gustaría hacer que mi gancho personalizado sea reutilizable tanto como pueda.

Me gustaría pasar el tipo genérico (porque para diferentes formularios tendré diferentes campos de errores) a mis const errors: Y = {}; que ahora está vacío, pero se puede devolver como objeto con errores de validación.

En la línea 4 const errors: Y = {}; Recibí un error:

El tipo '{}' no se puede asignar al tipo 'Y'. Se podría crear una instancia de 'Y' con un tipo arbitrario que podría no estar relacionado con '{}'.ts(2322)

DEMO DE CÓDIGOS Y CAJA: AQUÍ

validar.ts:

 export default function validate<T extends Record<string, string>, Y>( values: T ): Y { const errors: Y = {}; if (!values.title) { errors.title = "Title is required"; } return errors; }

Lugar donde uso el método validate :

 setErrors(validate<T, Y>(state));
 function useFormState<T extends Record<string, string>, Y>( initialValue: T, initialErrors: Y ) { const [state, dispatch] = useReducer( (prevState: T, { name, value }: InputChangeEvent["target"]) => ({ ...prevState, [name]: value }), initialValue ); const [errors, setErrors] = useState<Y>(initialErrors); const handleSubmit = (evt: FormEvent) => { evt.preventDefault(); setErrors(validate<T, Y>(state)); }; return [state, errors, handleSubmit] as const; } export default useFormState;

Traté de pasar un tipo diferente a este método const errors: ErrorValues = {}; Pero luego tengo dos problemas diferentes:

  1. Mi método no es reutilizable, porque no puedo usarlo de otra forma.
  2. Cuando quiero llamar a setErrors(validate(state)); Recibí otro error:

El argumento de tipo 'ErrorValues' no se puede asignar al parámetro de tipo 'SetStateAction'. El tipo 'ErrorValues' no se puede asignar al tipo '(prevState: Y) => Y'. El tipo 'ErrorValues' no proporciona ninguna coincidencia para la firma '(prevState: Y): Y'.ts(2345)

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

¿Puedes probar esto tal vez? Pasé este código temporalmente en su sandbox, parece estar bien

 export default function validate< T extends Record<string, string>, Y extends Record<string, unkown> >(values: T): Y { let errors: Y = {} as Y; if (!values.title) { errors = { ...errors, title: "Title is required ", }; } return errors; }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda