¿Cómo funciona exactamente el alias de tipo genérico Exclude de Typescript?
El alias de tipo genérico se define de la siguiente manera: type Exclude<T,U>=T extends U ? never : T. ¿Cómo hace esta definición para producir un tipo que excluye todas las propiedades de T que son asignables a U? Según mi interpretación, si T no se extiende a U, se debería generar el tipo dado T. Por ejemplo, en este ejemplo: type T0=Exclude<"a" | "b" | "c", "a"> debería devolver el tipo de unión "b" | "c", porque es el T en la definición de Exclude. ¿Alguien puede explicar en detalle cómo funciona la definición?
Respuesta #1
Los tipos condicionales son distributivos, es decir
Exclude<"a"|"b"|"c", "a">
se traduce a
"a" extends "a" ? never : "a" |
"b" extends "a" ? never : "b" |
"c" extends "a" ? never : "c"
lo que da never | "b" | "c" o simplemente "b" | "c"
