Eliminando any; preferindo unknown e redução
Substitua any por unknown + redução; adicione pequenas guardas e funções de asserção; ative as opções de rigor gradualmente sem interromper a compilação.
Eliminando any; preferindo unknown e redução é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 1 de 2. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 2 aulas no total.
Introdução
Objetivo: Remover os pontos problemáticos de any. Prefira unknown para valores não confiáveis e faça o estreitamento com verificações simples. Você adicionará pequenas proteções e ativará opções de rigor passo a passo.
- any → unknown
- Estreitamento com typeof/in/instanceof
- Funções de asserção
Armadilhas de any
any desativa a segurança: formatos incorretos ou operações matemáticas com strings passam pela compilação e falham mais tarde.
// any hides bugs
function avgBad(values: any): number {
// Compiles even if values is not an array of numbers
return values.reduce((a: number, b: number) => a + b, 0) / values.length
}
// Runtime crash examples:
// avgBad(123)
// avgBad(["1","2"]) // string addition!unknown + estreitamento
Use unknown para entradas externas. Faça o estreitamento com Array.isArray e typeof e depois calcule com segurança.
// unknown forces checks
function avg(values: unknown): number {
if (!Array.isArray(values)) throw new Error("values must be an array")
const nums = values.filter((v): v is number => typeof v === "number")
if (nums.length === 0) throw new Error("no numbers")
const sum = nums.reduce((a, b) => a + b, 0)
return sum / nums.length
}
// avg([1,2,3]) → 2; avg("oops") throws early with a clear messageProteções de tipo
Crie um predicado x is T para estreitar os tipos de quem chama a função de forma clara. Mantenha as proteções pequenas e concentradas em verificações estruturais.
// Small predicate to reuse narrowing
export type User = { id: string; name: string }
export function isUser(x: unknown): x is User {
return typeof x === "object" && x !== null
&& typeof (x as any).id === "string"
&& typeof (x as any).name === "string"
}
export function hello(x: unknown) {
if (!isUser(x)) throw new Error("invalid user")
return `Hello, ${x.name}`
}Funções de asserção
Funções de asserção (asserts x is T) fazem o estreitamento depois de serem executadas. Use-as para pré-condições obrigatórias e lance exceções com mensagens claras.
// Assertion function throws or narrows
function assertUser(x: unknown): asserts x is { id: string; name: string } {
if (typeof x !== "object" || x === null) throw new Error("not an object")
const o = x as Record<string, unknown>
if (typeof o.id !== "string" || typeof o.name !== "string") throw new Error("bad user")
}
export function greetUnsafe(x: unknown) {
assertUser(x) // now x is narrowed after this call
return `Hi ${x.name}`
}Plano de rigor
Plano:
- Ative
noImplicitAnye corrija primeiro os novos erros. - Introduza proteções para entradas externas.
- Ative
strictNullCheckse trate undefined explicitamente. - Acompanhe o
anyrestante com o ESLint e reduza seu uso ao longo do tempo.
Verificação de unknown versus any
Verificação rápida: Por que preferir unknown a any para dados não confiáveis?
Recapitulação
Recapitulação: Substitua any por unknown, adicione pequenas proteções ou asserções e aumente as opções de rigor em etapas pequenas para manter as compilações funcionando.
Perguntas Frequentes
A aula “Eliminando any; preferindo unknown e redução” é grátis?
Sim — o texto completo de “Eliminando any; preferindo unknown e redução” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 2 aulas no total.
O que vou aprender em “Eliminando any; preferindo unknown e redução”?
Substitua any por unknown + redução; adicione pequenas guardas e funções de asserção; ative as opções de rigor gradualmente sem interromper a compilação. Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar TypeScript Academy?
Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 2.
Quanto tempo leva a aula “Eliminando any; preferindo unknown e redução”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de TypeScript Academy?
Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Eliminando any; preferindo unknown e redução
- Aplicação gradual de flags estritas