• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

165
Views
¿Cómo trabajo correctamente con TypeScript cuando necesito cambiar un tipo de propiedad en un objeto?

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.

almost 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

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

Caja de arena mecanografiada

Nota: Cambié las clases a la interfaz, no sé si eso está bien o no.

almost 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error