TypeScript: правильный способ для аргумента многомерного массива - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю над некоторыми алгоритмами JS с TS.Таким образом, я сделал следующие функции:

function steamrollArray(arr: any[]): any[] {
  return arr.reduce(
    (accum: any, val: any) =>
      Array.isArray(val) ? accum.concat(steamrollArray(val)) : accum.concat(val)
  , []);
}

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

steamrollArray([[["a"]], [["b"]]]);
steamrollArray([1, [2], [3, [[4]]]]);
steamrollArray([1, [], [3, [[4]]]]);
steamrollArray([1, {}, [3, [[4]]]]);

Как правильно определить аргументы дляfunction?

Конечно, я мог бы использовать Types, как здесь: многомерный массив машинописи с разными типами , но не будет работать во всех случаях.

1 Ответ

0 голосов
/ 19 сентября 2018

Вы захотите определить тип, который может быть массивом, а может и нет.Что-то вроде:

type MaybeArray<T> = T | T[];

Затем вы можете обновить свою функцию до:

function steamrollArray<T>(arr: MaybeArray<T>[]): T[] {
    return arr.reduce(
        (accum: any, val: any) =>
             Array.isArray(val) ? accum.concat(steamrollArray(val)) : accum.concat(val)
    , []);
}

С этим Typescript сможет правильно анализировать типы и понимать ваши намерения.

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