¿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);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"; }, });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)