TypeScript "Vänstersidan av en aritmetisk operation måste vara av typen 'any', 'number', 'bigint' eller en enum-typ"


Jag har en array av objekt med detta gränssnitt

interface Item {
country: string;
cases: number;
deaths: number;
population: number;
}

Jag vill göra en sorteringsfunktion

const sortDescending = (type: keyof Item): void => {
    data.sort((a, b) => {
    
      return a[type] - b[type];
    });
    
  };

Problem som TypeScript inte tillåter mig att utföra på grund av "Vänstersidan av en aritmetisk operation måste vara av typen 'any', 'number', 'bigint' eller en enum-typ". Jag förstår att jag har strängar i objektet och att jag inte kan göra aritmetiska operationer med dem. Hur kan jag fixa det?

Svar #1

Typescript gör oss mer eftertänksamma när vi använder aritmetik, om det inte ser logiskt ut vid första anblicken, kommer det att ge det felet.

    const sortDescending = (type: keyof Item): void => {
      data.sort((a, b) => {
        // add types 'as any' -> or a better type like number | boolean
        return (a[type] as any) - (b[type] as any);
        // (<any>a[type]) can also be an option
       });
    };