import { curryN } from "@unboxing/function"; import { isArray,isArrayLike } from "@unboxing/is"; import { sliceArray } from "./slice"; interface Concat { (list1: string, list2: string): string; (list1: ArrayLike, list2: ArrayLike): (U | V)[]; (list1: string): (list2: string) => string; (list1: ArrayLike): (list2: ArrayLike) => (U | V)[]; } /** * Returns the result of concatenating the given arrays or strings. */ export const concat = curryN(2, (a: ArrayLike = [], b: ArrayLike = []) => { if (isArray(a)) { return a.concat(b); } if (isArrayLike(a)) { const resultArr: (U | V)[] = sliceArray(0, a.length, a); for (let i = 0; i < b.length; i++) { resultArr.push(b[i]); } return resultArr; } return (a as string) + b; }) as Concat