Как создать защиту типов для многомерного массива с различными типами элементов в Typescript - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь создать функцию фильтра в Typescript, которая принимает многомерный массив, например: [[1, 'a'], [[2, 'b'], [3, 'c']]]

Я пытаюсь определить тип, который будет принимать функция следующим образом:

function filter(arr: Array<(string | number)[] | (string | number)[][]>) {
  let result: (number | string)[][] = []
  for (let i = 0; i<arr.length; i++) {
    //console.log(arr[i])
    if (arr[i].length === 2) {
      result.push(arr[i])
    }
  }
}
console.log(filter([[1, 'a'], [[2, 'b'], [3, 'c']]]))

Вот ошибка, которую я получаю:

ERROR:
(parameter) arr: ((string | number)[] | (string | number)[][])[]
Argument of type '(string | number)[] | (string | number)[][]' is not assignable to parameter of type '(string | number)[]'.
  Type '(string | number)[][]' is not assignable to type '(string | number)[]'.
    Type '(string | number)[]' is not assignable to type 'string | number'.
      Type '(string | number)[]' is not assignable to type 'string'.ts(2345)

Не знаю понимаю почему. Я четко определил, что массив будет состоять из массива строк или массива массивов строк. В чем может быть проблема? Спасибо!

...