TypeScript - 分布式条件类型

TypeScript - Distributive conditional types

话不多说,秀代码! 对了,我测试的ts版本是4.6.4

type ITypeA = ((args: { A: any }) => any) | ((args: { B: any }) => any);

type Test<T> = T extends (args: infer A) => any ? A : never;

// type Result1 = {
//     A: any;
// } | {
//     B: any;
// }
type Result1 = Test<ITypeA>;

// type Result2 = {
//     A: any;
// } & {
//     B: any;
// }
type Result2 = ITypeA extends (args: infer A) => any ? A : never;

Result1可能在ts中使用'distributive conditional types'规则,所以type Result1 = { A: any;} | { B: any;}.

我的问题是为什么 Result2 不应用此规则?它们有什么区别吗?

Playground Link

请参阅docs

When conditional types act on a generic type, they become distributive when given a union type. For example, take the following:

有一个要求,你需要在 generic 上采取行动。

Result2 作用于已知类型,没有泛型,而 Result1 使用 Test,后者又使用 generic T