Можно ли проверить, является ли данный тип объединением?
type IsUnion<T> = ???
Зачем мне это нужно: в моем коде у меня есть единственный случай, когда некоторый полученный тип может быть объединением. Я справляюсь с дистрибутивным условным типом. Тем не менее, для того, кто смотрит на этот код, может быть не очевидно, почему DCT используется в первую очередь. Итак, я хочу, чтобы это было явно так: IsUnion<T> extends true? T extends Foo...
IsUnion<T> extends true? T extends Foo...
Я сделал несколько попыток с UnionToIntersection
, но UnionToIntersection
. Я также придумал это:
type IsUnion<T, U extends T = T> =
T extends any ?
(U extends T ? false : true)
: never
Это дает false
для не профсоюзов, но по какой-то причине это дает boolean
для союзов... И я понятия не имею, почему. Я также пытался infer
U из T, но безуспешно.
PS Мой вариант использования может показаться кому-то не идеальным/правильным/хорошим, но в любом случае возник вопрос в названии, и я задаюсь вопросом, возможно ли это (я чувствую, что это так, но мне самому трудно это понять).