Búsqueda de sitios web

En TypeScript, ¿por qué un tipo inferido para un tipo unión toma ambos caminos de un operador ternario?


Inferir un tipo dentro de una definición de tipo parece seguir ambos caminos en un ternario cuando el Tipo inferido es enumerable (vs incontable).

En el código a continuación, cuando el tipo inferido puede ser enumerado (es una unión de múltiples valores), la definición del tipo parece tomar dos caminos y devolver una unión de los caminos verdadero y falso del segundo operador ternario (interior). Sin embargo, cuando el tipo inferido es incontable (numérico, cadena - por lo tanto infinito), solo se toma uno de los caminos ternarios interiores.

Tenga en cuenta que en el caso alt, cuando no hay infer, el tipo se reduce como se esperaba.

¿Qué está pasando aquí? ¿Por qué TypeScript se comporta así en presencia de infer?

No estoy diciendo que este sea un comportamiento incorrecto, simplemente no estoy seguro de dónde está documentado o cómo encontrarlo en la documentación.

Gracias.

// type of union1 == 0 | 1; type of alt1 == 0
var union1:
    boolean extends infer Type ?
        Type extends true ?
            1 :
            0 :
        never;

var alt1: boolean extends true ? 1 : 0;


// type of union4 == 0; type of alt4 == 0
var union4:
    string extends infer Type ?
        Type extends "a" ?
            1 :
            0 :
        never;
var alt4: string extends "a" ? 1 : 0;

Campo de Juegos TS