Tengo esta clase que representa JSON entrante de solicitud POST.
class MilkCarton { company: string; price: number; expiredAt?: string; // ...20 more properties } Antes de almacenarlo en mi base de datos mongoDB, quiero cambiar el tipo de expiredAt to Date , por lo que tengo otra clase que representa el esquema de la base de datos.
class MilkCartonSchema: { company: string; price: number; expiredAt?: Date; // ...20 more properties } expiredAt puede ser nulo, quiero crear un objeto que copie el objeto de tipo MilkCarton pero que tenga su expiredAt convertido a Date
prepareMilkForDb(milk: MilkCarton): MilkCartonSchema { const preparedMilk = { ...milk, } if (milk.expiredAt) { preparedMilk.expiredAt = new Date(milk.expiredAt) } return preparedMilk; } Pero me encuentro con un error porque la leche preparedMilk ya ha inferido su tipo y ha expiredAt como string , no se puede convertir en Date desde la perspectiva de TypeScript si es una string . Pero quiero que se convierta en Date , ¿cuál es el enfoque para hacerlo correctamente en TypeScript?
EDITAR: terminé yendo con:
prepareMilkForDb(milk: MilkCarton): MilkCartonSchema { const preparedMilk = { ...milk, ...(milk.expiredAt && { expiredAt: new Date(milk.expiredAt) }), } return preparedMilk; } Esto funciona, pero no es exactamente lo que deseaba, si tuviera otro ejemplo con 3 propiedades string ISO anidadas profundas diferentes que necesitan convertirse a Date (y al revés), sería muy sucio hacer esta solución.
¿Esto funciona para tí?
interface MilkCarton { company: string; price: number; expiredAt?: string; // ...20 more properties } interface MilkCartonSchema { company: string; price: number; expiredAt?: Date; // ...20 more properties } const prepareMilkForDb = (milk: MilkCarton): MilkCartonSchema => { return { ...milk, expiredAt: milk.expiredAt == null ? undefined : new Date(milk.expiredAt) }; }Nota: Cambié las clases a la interfaz, no sé si eso está bien o no.