TypeScript: Mod corect pentru argumentul unui array multidimensional
Lucrez la niște algoritmi JS cu TS. Așa că am făcut aceste funcții:
function steamrollArray(arr: any[]): any[] {
return arr.reduce(
(accum: any, val: any) =>
Array.isArray(val) ? accum.concat(steamrollArray(val)) : accum.concat(val)
, []);
}
dar argumentele au nevoie de flexibilitatea de a accepta array-uri cu mai multe dimensiuni, după cum urmează:
steamrollArray([[["a"]], [["b"]]]);
steamrollArray([1, [2], [3, [[4]]]]);
steamrollArray([1, [], [3, [[4]]]]);
steamrollArray([1, {}, [3, [[4]]]]);
Care este modul corect de a defini argumentele pentru funcție?
Cu siguranță aș putea folosi tipuri, ca aici: arrays multidimensionale TypeScript cu tipuri diferite, dar nu va funcționa în toate cazurile.
Răspuns #1
Vei dori să definești un tip care este posibil un array și posibil nu. Ceva de genul:
type MaybeArray<T> = T | T[];
Atunci poți să-ți actualizezi funcția la:
function steamrollArray<T>(arr: MaybeArray<T>[]): T[] {
return arr.reduce(
(accum: any, val: any) =>
Array.isArray(val) ? accum.concat(steamrollArray(val)) : accum.concat(val)
, []);
}
Cu asta, Typescript va putea să analizeze corect tipurile și să înțeleagă intenția ta.
