Talk is cheap,show the code!
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 may use ‘distributive conditional types’ rule in ts, so type Result1 = { A: any;} | { B: any;}. My question is why does Result2 not apply this rule? Is there any difference between them?