arrays - El argumento de tipo 'Date[]' no se puede asignar al parámetro de tipo 'number[]'
Tengo un objeto con fechas así
const dateObject = {
"BaseTransactions.maxOccurredAt": "2021-01-19T20:30:45.000",
"BaseTransactions.minOccurredAt": "2016-12-28T12:55:37.000",
"EmailCampaignEvents.maxOccurredAt": "2021-04-13T11:32:50.000",
"EmailCampaignEvents.minOccurredAt": "2021-04-09T12:15:26.000",
};
y he creado un arreglo a partir de él con fechas así
const arrayOfDates: Date[] = Object.values(dateObject).map(
(date: string | unknown) => new Date(date as string)
);
y estoy tratando de obtener las fechas mínimas y máximas de ese arreglo así
const minDate = new Date(Math.min.apply(null, arrayOfDates));
const maxDate = new Date(Math.max.apply(null, arrayOfDates));
pero estoy recibiendo un error de TypeScript para arrayOfDates dentro de Math.min y Math.max. El error dice esto: Argument of type 'Date[]' is not assignable to parameter of type 'number[]'. Type 'Date' is not assignable to type 'number'.ts(2345). ¿Qué estoy haciendo mal?
Respuesta #1
Hay una solución mucho más simple a tu problema que la respuesta que proporcionaste. El problema es que las funciones Math.min y Math.max intentan encontrar el número más pequeño/más grande, y no saben cómo comparar fechas. Si tu arreglo en cambio fuera un arreglo de números, habría funcionado. Puedes obtener un número usando .getTime() de Date, lo cual te dará el número de milisegundos desde el 1 de enero de 1970 (== tiempo UNIX). El constructor de Date también acepta eso como entrada y creará un objeto Date a partir de ese número.
También cambié algunas cosas en tu código que pensé que lo harían más limpio.
const arrayOfDateNumbers: number[] = Object.values(dateObject)
.map(date =>
(new Date(date)).getTime()
);
const minDate = new Date(Math.min(...arrayOfDateNumbers));
const maxDate = new Date(Math.max(...arrayOfDateNumbers));
