Рассмотрим тип
type Smth<T, U> = ...
Теперь я хочу проверить, является ли T
string
OR U
примитивным.
Я могу проверить условия отдельно
type AreSame<T, U, Y, N> = (<X>() => X extends T ? 1 : 2) extends (<X>() => X extends U ? 1 : 2) ? Y : N
type IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N
type IfPrimitive<T, Y, N> = T extends string | number | boolean | symbol | bigint | null | undefined ? IfAny<T, N, Y> : N
type Smth1<T, U> = AreSame<T, string, true, false>
type Smth2<T, U> = IfPrimitive<U, true, false>
, но как присоединиться к ним через or
?