summaryrefslogtreecommitdiff
path: root/src/ts-lang/util/string.ts
blob: 5772f4091f1ea6fe40662a1b2fa2ebdcd792b18e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
  ? `${T}`
  : T extends readonly any[]
  ? T extends readonly [infer Head, ...infer Tail]
    ? `${ToString<
        Tail,
        `${Carry extends "" ? "" : `${Carry}, `}${ToString<Head>}`
      >}`
    : `[${Carry}]`
  : never;