TRen208
@TRen208

Как правильно «объединить тип»?

Есть такой тип:
type char = "A" | "B" | "C" | "D";

Каким образом я могу сделать из него
type t1 = ["A", "B", "C", "D"];
И
type t2 = "ABCD";
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
Так как порядок в юнион не определен, можно получить лишь юнион всех возможных вариантов:
type Char = "A" | "B" | "C" | "D";
type ConcatMap<T> = T extends unknown
    ? {} extends T[keyof T]
        ? `${string & keyof T}`
        : `${string & keyof T}${ConcatMap<T[keyof T]>}`
    : never;
type MapChars<C extends Char> = {
    [K in C]: MapChars<Exclude<C, K>>
};
type Split<S extends string> = S extends `${infer H}${infer Tail}`
    ? [H, ...Split<Tail>]
    : [];
type T1 = Split<T2>;
type T2 = ConcatMap<MapChars<Char>>;

https://www.typescriptlang.org/play?#code/C4TwDgpg...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы