Say I have an array of strings like:
const a = ['foo', ['aa'], [['zzz',['bar']]]];
export const acceptsArray = (v: Array<any>) : string => {
returns flattenDeep(v).join(' ');
};
besides using Array<any>
how can I represent a nested array of strings?
SOLUTION
Note only works on Typescript version 3.7+
type A = 'foo' | 'aa' | 'zzz' | 'bar' | A[]
const a:A = ['foo', ['aa'], [['zzz',['bar']]]];
export const acceptsArray = (v: Array<A>) : string => {
returns flattenDeep(v).join(' ');
};
Thank you
Please check this utility function I wrote earlier.
// NestedArray<T> represents T or Array of T or Array of Array of T .....
// let nestedNumbers: NestedArray<number> = [[[[[1]]]]];
export type NestedArray<T> = Array<T> | Array<NestedArray<T>>;
// Able to flatten deeply nested array
// flattenArray(nestedNumbers) should produce => [1] : Array<number>
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];
}, []);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With