Tengo una pregunta con respecto a la extensión de una interfaz para permitir campos duplicados. Básicamente necesito crear 2 solicitudes. Una solicitud maneja un evento, la otra solicitud maneja 2 eventos.
Ejemplo:
Una solicitud de evento:
events[ { "name": "EventOne" "description": EventOne Description } ]Solicitud de dos eventos:
events[ { "name": "EventOne" "description": EventOne Description }, { "name": "EventTwo" "description": EventTwo Description } ]Entonces tengo un método y luego envío una solicitud así:
export function performRequest(params: IEvent) { return request(test) .post(`/events`) .send(params);Entonces tengo dos interfaces. Uno trata con un solo objeto de solicitud (IEventDetails), el otro extiende IEventDetails y maneja la solicitud de dos eventos que se conoce como IMultiEventDetails:
interface IEvent { events: [IEventDetails]; } interface IEventDetails { name?: string; description?: string; } interface IMultiEventDetails extends IEventDetails{ name?: string; description?: string; }Ahora, cuando invoco mis solicitudes, funciona para el evento único, pero no para el evento múltiple, ya que me da el error:
Source has 2 element(s) but target allows only 1Cuando llamo mis solicitudes:
A continuación funciona:
const response = await performRequest({ events[{ name: "EventOne" description: "EventOne Description" }] ...Debajo de los errores:
const response = await performRequest({ events[{ name: "EventOne" description: EventOne Description }, { name: "EventTwo" description: EventTwo Description }] ...Esto tiene sentido ya que no estoy llamando a IMultiEventDetails. Estoy tratando de evitar crear un método para llamar a un solo evento y otro método para llamar a múltiples eventos. Entonces, ¿hay alguna manera de llamar a IEvent y hacer que pueda manejar solicitudes de eventos únicos o múltiples?
[IEventDetails] especifica una matriz con un elemento
IEventDetails[] especifica una matriz de tipo IEventDetails , por lo que cualquier cantidad de IEventDetails está bien
interface IEvent { events: IEventDetails[]; } interface IEventDetails { name?: string; description?: string; }