devterview_$ iniciar simulação

Narrowing e type guards

MédioPlenoSistema de tipos

Pergunta

O que é narrowing em TypeScript e como você escreve um type guard customizado?

Resposta esperada

Narrowing é o compilador estreitar o tipo de uma variável dentro de um bloco a partir de checagens: `typeof x === 'string'`, `x instanceof Date`, `'campo' in x`, comparação com `null`, ou um discriminante (`x.tipo === 'circulo'`) numa união discriminada. Dentro do bloco, o TS trata `x` como o tipo mais específico. Um type guard customizado é uma função cujo retorno é um 'type predicate': `function ehUsuario(v: unknown): v is Usuario { return typeof v === 'object' && v !== null && 'email' in v; }` — quando você chama `if (ehUsuario(x))`, o compilador estreita `x` pra `Usuario` no ramo verdadeiro. Útil pra validar dados de fora (junto com uma lib como Zod, que gera o guard). O cuidado: o corpo do guard tem que realmente checar o que promete, senão você mente pro compilador.

Por que perguntam isso

Pergunta pleno de TS. Sinais de domínio: 'type predicate' (`v is T`), união discriminada, e o risco de um guard que mente.

#narrowing#type-guards#type-predicate
publicidade

Relacionadas