Избавьтесь от типа: any in method - PullRequest
0 голосов
/ 08 мая 2020

может быть, ты сможешь мне помочь.

Итак, я хотел бы избавиться от любых типов в методе DesndingComparator и заменить их на соответствующий тип. На данный момент я застрял и буду благодарен за любую помощь.

function descendingComparator(a: any, b: any, orderBy: string) {
  if (b[orderBy] < a[orderBy]) {
    return -1;
  }
  if (b[orderBy] > a[orderBy]) {
    return 1;
  }
  return 0;
}

function getComparator(order: string, orderBy: string) {
  return order === 'desc'
    ? (a, b) => descendingComparator(a, b, orderBy)
    : (a, b) => -descendingComparator(a, b, orderBy);
}

Как я его использую:

{stableSort(rows, getComparator(order, orderBy)) ...}

Спасибо!

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Если я понимаю проблему, вы можете сделать что-то вроде:

function descendingComparator<T extends object, TOrder extends keyof T>(a: T, b: T, orderBy: TOrder) {
  if (b[orderBy] < a[orderBy]) {
    return -1;
  }
  if (b[orderBy] > a[orderBy]) {
    return 1;
  }
  return 0;
}

Используйте как:


const a = {
    x: 1
};

const b = {
    x: 2
};

descendingComparator(a, b, 'x'); // works
descendingComparator(a, b, 'y'); // needs to be 'x' 
1 голос
/ 08 мая 2020

Если это предназначено для сравнения чисел, то что-то вроде этого:

function descendingComparator(
   a: { [x: string]: number },
   b: { [x: string]: number },
   orderBy: string
) {
...
}

, и вы можете ввести a и b в getComparator аналогичным образом.

Если это предназначено для сравнения неизвестного, но непротиворечивого типа, а затем что-то вроде этого:

function descendingComparator<T>(
   a: { [x: string]: T },
   b: { [x: string]: T },
   orderBy: string
) {
...
}

и снова вы можете ввести getComparator аналогичным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...