'Date[]' 类型的参数不能分配给 'number[]' 类型的参数

Argument of type 'Date[]' is not assignable to parameter of type 'number[]'

我有一个日期像这样的对象

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",
};

我用它创建了一个数组,其中包含这样的日期

const arrayOfDates: Date[] = Object.values(dateObject).map(
    (date: string | unknown) => new Date(date as string)
  );

我正在尝试从该数组中获取最小和最大日期,如下所示

const minDate = new Date(Math.min.apply(null, arrayOfDates));
const maxDate = new Date(Math.max.apply(null, arrayOfDates));

但我在 Math.min 和 Math.max 中收到 arrayOfDates 的打字稿错误。错误说这个 Argument of type 'Date[]' is not assignable to parameter of type 'number[]'. Type 'Date' is not assignable to type 'number'.ts(2345)。 我做错了什么?

对于您的问题,有比您提供的答案更简单的解决方案。问题是 Math.min 和 Math.max 函数试图找到 smallest/biggest 数字,但不知道如何比较日期。如果您的数组是一个数字数组,它就会起作用。您可以使用 Date 的 .getTime() 获得一个数字,该数字将为您提供自 1970 年 1 月 1 日以来的毫秒数(== UNIX 时间)。 Date 构造函数也接受它作为输入,并将根据该数字创建一个 Date 对象。

我还更改了您的代码中的一些内容,我认为这些内容会使其更清晰。

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