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;
}