网站搜索

在 TypeScript 中将交叉类型转换为联合类型


我想在 TypeScript 中获取其中一个重载函数。

我不知道如何做到这一点,但我知道如何遍历联合类型以获取其中的类型,而重载函数被表示为函数的交叉类型,所以我想将交叉类型转换为联合类型。

在 TypeScript 中将交叉类型转换为联合类型,如下所示:

type InterscetionToUnion<T> =  T; // impl here

// test case
type intersection = { a: 1 } & { b: 2 };
type test = ExceptTrue<Equals<{ a: 1 } | { b: 2 }, InterscetionToUnion<intersection>>>

type Equals<O1, O2> = (<T>(arg: T extends O1 ? T : T) => void) extends (<T>(arg: T extends O2 ? T : T) => void) ? true : false
type ExceptTrue<T extends true> = T;

TS 允许这样做吗?我在 type-challenges 中没找到类似的问题。