Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

147
Views
¿Cómo pasar la interfaz al genérico?

¿Cómo puedo pasar la interfaz como un tipo a genérico? Genérico se ampliará en el futuro. ¿Quizás ese código es absolutamente incorrecto para mi problema?

Este código se duplicará en varios archivos. 2 líneas (sin interfaz) frente a 12. Intento pasar la interfaz pero veo un error.

 Expected 5 arguments, but passed 1.

 helpers.ts export const httpRequestsActions = < TAllData, TSingleData, TCreate, TEdit, TDelete >() => { const getAllDataAction: IActionFn<TAllData> = (payload) => { return "data"; }; const getSingleDataAction: IActionFn<TSingleData> = (payload) => { return "data"; }; const createDataAction: IActionFn<TCreate> = (payload, params) => { return "data"; }; const editDataAction: IActionFn<TEdit> = (payload, params) => { return "data"; }; const deleteDataAction: IActionFn<TDelete> = (payload) => { return "data"; }; return { getAllDataAction, getSingleDataAction, createDataAction, editDataAction, deleteDataAction, }; }; ==Current code== actions.ts, sagas.ts import { ICreateEmployee, IEditEmployee, IGetEmployees, } from "interfaces/employees"; export const employeesActions = httpRequestsActions< IGetEmployees, { id: string }, ICreateEmployee, IEditEmployee, { id: string } >(EMPLOYEES); ==I want== inteface.ts export interface ITypeEmployees { TAllData: IGetEmployees; TSingle: { id: string }; TCreate: ICreateEmployee; TEdit: IEditEmployee; TDelete: { id: string }; } actions.ts, sagas.ts import { ITypeEmployees } from "interfaces/employees"; export const employeesActions = httpRequestsActions<ITypeEmployees>(EMPLOYEES);
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Para usar un solo parámetro de tipo como en

 export const employeesActions = httpRequestsActions<ITypeEmployees>(EMPLOYEES);

deberá declarar una función con solo un parámetro de tipo que coincida con esa interfaz:

 export const httpRequestsActions = <T extends { TAllData: unknown; TSingleData: unknown; TCreate: unknown; TEdit: unknown; TDelete: unknown; }>(): { getAllDataAction: IActionFn<T["TAllData"]>; getSingleDataAction: IActionFn<T["TSingleData"]>; createDataAction: IActionFn<T["TCreate"]>; editDataAction: IActionFn<T["TEdit"]>; deleteDataAction: IActionFn<T["TDelete"]>; } => ({ getAllDataAction(payload) { return "data"; }, getSingleDataAction(payload) { return "data"; }, createDataAction(payload, params) { return "data"; }, editDataAction(payload, params) { return "data"; }, deleteDataAction(payload) { return "data"; }, });
about 4 years ago · Juan Pablo Isaza Report

0

Entonces tienes tus tipos separados así

 export const httpRequestsActions = <TAllData, TSingleData, TCreate, TEdit, TDelete>() => { // rest of your code };

y lo estás llamando así:

 export const employeesActions = httpRequestsActions<ITypeEmployees>(EMPLOYEES)

Debido a que tiene estos TAllData, TSingleData, TCreate, TEdit, TDelete separados por comas, httpRequestsActions espera que se pasen 5 tipos. Solo está pasando una interfaz ITypeEmployees . Debido a que no sé cuál es su intención final, mi sugerencia basada en lo que puedo ver sería hacer esto:

 type TAllData = IGetEmployees; interface TSingle { id: string }; type TCreate = ICreateEmployee; type TEdit = IEditEmployee; interface TDelete { id: string }; export const employeesActions = httpRequestsActions<TAllData, TSingleData, TCreate, TEdit, TDelete>(EMPLOYEES)
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!