summaryrefslogtreecommitdiff
path: root/src/lang/ts-lang/util/string.ts
blob: ae17c2c35cb2ba74aac4619d89633859da62b1dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
export type AddStrings<
  Strings extends readonly string[],
  Carry extends string = ""
> = Strings extends [infer Head extends string, ...infer Tail extends string[]]
  ? AddStrings<Tail, `${Carry}${Head}`>
  : Carry;

export type ToString<T, Carry extends string = ""> = T extends
  | string
  | number
  | boolean
  ? `${T}`
  : T extends readonly any[]
  ? T extends readonly [infer Head, ...infer Tail]
    ? `${ToString<
        Tail,
        `${Carry extends "" ? "" : `${Carry}, `}${ToString<Head>}`
      >}`
    : `[${Carry}]`
  : never;