main
Kimi Löffel 3 years ago
parent 7bb961c548
commit e4a2801c98

@ -0,0 +1,35 @@
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<Join<['a', 'p', 'p', 'l', 'e'], '-'>, 'a-p-p-l-e'>>,
Expect<Equal<Join<['Hello', 'World'], ' '>, 'Hello World'>>,
Expect<Equal<Join<['2', '2', '2'], 1>, '21212'>>,
Expect<Equal<Join<['o'], 'u'>, '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<T, U, ''>
Loading…
Cancel
Save