Тип сортировки по дате не работает

У меня есть объект TaskItemVO с полем dueDate который имеет тип Date:

export class TaskItemVO {

    public dueDate: Date;
}

У меня есть этот метод, который я вызываю, когда пытаюсь сортировать по дате, но он не работает:

public sortByDueDate(): void {
    this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
        return a.dueDate - b.dueDate;

    });
}

Я получаю эту ошибку в обратной линии метода:

Правая часть арифметической операции должна быть типа "any", "number" или типа enum.

Левая часть арифметической операции должна иметь тип "any", "number" или тип перечисления.

Итак, каков правильный способ сортировки массивов по дате в TypeScript?

Ответ 1

Попробуйте использовать метод Date.getTime():

public sortByDueDate(): void {
    this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
        return a.dueDate.getTime() - b.dueDate.getTime();

    });
}

^ Выше выдает ошибку с неопределенной датой, поэтому попробуйте ниже:


редактировать

Если вы хотите обрабатывать undefined:

private getTime(date?: Date) {
    return date != null ? date.getTime() : 0;
}


public sortByDueDate(): void {
    this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
        return this.getTime(a.dueDate) - this.getTime(b.dueDate);
    });
}

Ответ 2

В качестве возможного обходного пути вы можете использовать оператор унарного + здесь:

public sortByDueDate(): void {
    this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
        return +new Date(a.dueDate) - +new Date(b.dueDate);
    });
}

Ответ 3

Если вы столкнулись с проблемами с принятым ответом выше. Я получил его для работы, создав новую дату и передав параметр даты.

  private getTime(date?: Date) {
    return date != null ? new Date(date).getTime() : 0;
  }

  public sortByStartDate(array: myobj[]): myobj[] {
    return array.sort((a: myobj, b: myobj) => {
      return this.getTime(a.startDate) - this.getTime(b.startDate);
    });
  }