diff --git a/join.ts b/join.ts new file mode 100644 index 0000000..82d5f5b --- /dev/null +++ b/join.ts @@ -0,0 +1,35 @@ +import type { Equal, Expect } from '@type-challenges/utils' + +type cases = [ + Expect, 'a-p-p-l-e'>>, + Expect, 'Hello World'>>, + Expect, '21212'>>, + Expect, 'o'>>, +]; + +type Stringable = (string | number | bigint | boolean | null | undefined); + +type JoinInternal< + T extends Stringable[], + U extends Stringable, + Acc extends string +> = T extends [infer First, infer Second, ...infer Tail] + ? First extends Stringable + ? Second extends Stringable + ? Tail extends Stringable[] + ? JoinInternal<[Second, ...Tail], U, `${Acc}${First}${U}`> + : never + : never + : never + : T extends [infer Head, ...infer Tail] + ? Head extends Stringable + ? `${Acc}${Head}` + : never + : Acc +; + + +type Join< + T extends Stringable[], + U extends Stringable, +> = JoinInternal \ No newline at end of file