From e4a2801c98ed1a95bfae12a749c346671aff64e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kimi=20L=C3=B6ffel?= Date: Sat, 11 Mar 2023 17:10:11 +0100 Subject: [PATCH] add join --- join.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 join.ts 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