Le rétrécissement de types (narrowing) est le raffinement d'un type large vers un type plus précis à l'intérieur d'une branche de code, grâce à des tests comme typeof, instanceof, in ou une comparaison d'égalité. Le compilateur suit ces contrôles de flux et autorise alors les opérations propres au type restreint.
Exemple
function f(x: string | number) {
if (typeof x === 'string') return x.toUpperCase();
return x.toFixed(2);
}