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.