typeScript написать дженерик для функции

У меня есть такая функция

type NestedArrayElement = number | number[] | any;

export function func(arr: NestedArrayElement): number[] {
  ... какой-то код
  return numberArr;

}

в эту функцию передается массив, внутри которого еще массив или еще два массива, или три массива

const arr = [
[0, 1],
[3,4]
]
or 
const arr = [
[[2,3],[5,6],[[7],[7,8]]]
]

я попытался написать тип для этой функции, у меня не получилось без any

type NestedArrayElement = number | number[] | any;

здесь вроде можно написать дженерик, чтобы потом этот тип передавать, может кто помочь?


Ответы (2 шт):

Автор решения: En Kratia

Если у вас будет даже 100 массивов внутри, все будет работать также:

 export type NestedArray<T> = Array<T> | Array<NestedArray<T>>;
    export const flattenArray = <T>(arr: NestedArray<T>): Array<T> => {
      if (!Array.isArray(arr)) return arr ? [arr] : [];
    
      return arr.reduce<Array<T>>((acc: Array<T>, item: NestedArray<T>) => {
        if (Array.isArray(item)) {
          return [...acc, ...flattenArray(item)];
        }
        return [...acc, item];
      }, []);
    };

    const arr: NestedArray<number> = [
      [
        [2, 3],
        [5, 6],
        [[7], [7, 8]],
      ],
    ];

Ответ взят тут: https://stackoverflow.com/a/68349501/19366149

→ Ссылка
Автор решения: VerZsuT

Что насчёт этого?

type NestedArray<T> = Array<T | NestedArray<T>>;

export function func<T = number>(arr: NestedArray<T>): T[] {
  ... какой-то код
  return numberArr;
}
→ Ссылка