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
不应用此规则?它们有什么区别吗?
请参阅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
话不多说,秀代码! 对了,我测试的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
不应用此规则?它们有什么区别吗?
请参阅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