¡Hablar es barato, muestra el código! Por cierto, la versión de ts que estoy probando es la 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 puede usar la regla de 'tipos condicionales distributivos' en ts, así que type Result1 = { A: any;} | { B: any;} .
Mi pregunta es ¿por qué Result2 no aplica esta regla? ¿Hay alguna diferencia entre ellos?
Por favor, consulte los documentos
Cuando los tipos condicionales actúan sobre un tipo genérico, se vuelven distributivos cuando se les da un tipo de unión. Por ejemplo, tome lo siguiente:
Hay un requisito, debe actuar en generic .
Result2 actúa sobre tipos conocidos, no hay genérico, mientras que Result1 usa Test que a su vez usa generic T