TypeScript Sorting Object by Date

typescript

Solution

Reason

The type signature for `Array.prototype.sort` is:

sort(compareFn?: (a: T, b: T) => number): this;

which means the `compareFn` should return a `number`. In your case, you're trying to subtract an object from another object which doesn't make much sense. It works only because JavaScript implicitly coerces their type for you.

Solution 1

Judging by your question, I assume `filteredTxs` are objects that include a `date` property of type `Date`.

Cast your `Date` objects to a number explicitly:

this.filteredTxs.sort(function(a,b): any{
        return (b.date.getTime() - a.date.getTime());
});

Solution 2

Use implicit casting to compare dates, but only for comparison purposes, not for subtraction.

this.filteredTxs.sort(function(a,b): any {
  .sort((a, b) => {
    if (left.date === right.date) {
      return 0;
    }

    return (left.date > right.date)
      ? 1
      : -1
});

Problem

I have this little code I borrowed from another question for sorting objects in an array by date. However, I can't figure out how to port this to TypeScript. ``` this.filteredTxs.sort(function(a,b): any{ return new Date(b.date) - new Date(a.date); }); ``` TS Error: ERROR in /transactions-view.component.ts(72,16): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. /transactions-view.component.ts(72,35): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.

Original source

Related problems