node.js - Mapear de una interfaz a otra
Vengo de Java y normalmente uso DTO para mapear a Entity y viceversa. Pero me está resultando difícil hacer esto en Typescript + Nodejs. Lo que tengo son dos interfaces:
export interface IOne {
clientId: number;
clientName: string;
...
}
export interface ITwo {
userId: number;
userName: string;
...
}
Se recibe una llamada GET en el formato de la Interfaz Uno y la Interfaz Dos es responsable de capturar esta respuesta y hacer una solicitud POST después.
La siguiente implementación obtiene undefined:
let userTwo: ITwo;
userTwo.map(data => {
return <ITwo> {
userId: data.clientId,
userName: data.clientName,
...
};
});
¿Cuál es la manera correcta en Typescript/Nodejs de mapear la respuesta devuelta en un formato de interfaz y luego convertirla a otro formato de interfaz en el patrón DTO a Objeto de Dominio?
Respuesta #1
Podrías hacer algo como esto:
export interface IOne {
clientId: number;
clientName: string;
...
}
export interface ITwo {
userId: number;
userName: string;
...
}
const toDTO = (input: IOne): ITwo => {
return {
userId: input.clientId,
userName: input.clientName
}
}
const handleReq = (req) => {
// we assume you have to tell Typescript what userOne is
const userOne = req.userOne as IOne[]
// userTwo will be typed as ITwo[] or Array<ITwo> through inference
const userTwo = userOne.map(u => toDTO(u))
}
Respuesta #2
Una guía completa sobre cómo implementar DTOs en TypeScript se puede encontrar en el siguiente artículo:
https://khalilstemmler.com/articles/typescript-domain-driven-design/repository-dto-mapper/
Contiene más detalles, pero también muestra las buenas prácticas de implementar lo que pediste.
