Pular para o conteúdo

Análise de Fluxo de Controle

A Análise de Fluxo de Controle no TypeScript é uma maneira de analisar estaticamente o fluxo do código para inferir os tipos de variáveis, permitindo que o compilador estreite os tipos dessas variáveis conforme necessário, com base nos resultados da análise.

Antes do TypeScript 4.4, a análise de fluxo de código só seria aplicada ao código dentro de uma instrução if, mas a partir do TypeScript 4.4, ela também pode ser aplicada a expressões condicionais e acessos a propriedades discriminantes referenciadas indiretamente através de variáveis const.

Por exemplo:

const f1 = (x: unknown) => {
const isString = typeof x === 'string';
if (isString) {
x.length;
}
};
const f2 = (
obj: { kind: 'foo'; foo: string } | { kind: 'bar'; bar: number }
) => {
const isFoo = obj.kind === 'foo';
if (isFoo) {
obj.foo;
} else {
obj.bar;
}
};

Alguns exemplos onde o narrowing não ocorre:

const f1 = (x: unknown) => {
let isString = typeof x === 'string';
if (isString) {
x.length; // Erro, sem narrowing porque isString não é const
}
};
const f6 = (
obj: { kind: 'foo'; foo: string } | { kind: 'bar'; bar: number }
) => {
const isFoo = obj.kind === 'foo';
obj = obj;
if (isFoo) {
obj.foo; // Erro, sem narrowing porque obj é atribuído no corpo da função
}
};

Observações: Até cinco níveis de indireção são analisados em expressões condicionais.