Как преобразовать объединение объектов в простое объединение со значениями объекта. Пример:
type Foo = {};
type Bar = {};
type Baz = {};
type Qux = {};
type Input = {
foo: Foo,
bar: Bar,
} | {
bar: Bar,
baz: Baz,
} | {
qux: Qux,
};
type Expected = Foo | Bar | Baz | Qux;
Обратите внимание, что ключи объектов объединения могут пересекаться (в примере bar). Надеюсь, что решение поможет мне развернуть вложенные типы.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы хотите взять что-то вроде типа ValueOf<T> (это просто T[keyof T]) и распределить его по членам объединения T так, чтобы если T, например, A | B | C, то Transform<T> было A[keyof A] | B[keyof B] | C[keyof C]. Вы можете использовать распределительный условный тип, чтобы получить такое поведение:
type Transform<T> = T extends any ? T[keyof T] : never;
Давайте проверим это:
type Output = Transform<Input>
// type Output = Foo | Bar | Baz | Qux
Выглядит неплохо.