0Pricing
TypeScript Academy · Aula

unknown versus any: a escolha mais segura

Aprenda por que unknown obriga você a verificar os tipos antes de usá-los.

unknown versus any: a escolha mais segura é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 3 de 4. 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 4 aulas no total.

Boas-vindas

O TypeScript 3.0 introduziu o tipo `unknown` como uma alternativa segura ao tipo `any`. Nesta lição, você aprenderá por que `unknown` é mais seguro e quando usá-lo.

O problema com any

Com `any`, o TypeScript desativa todas as verificações. Você pode chamar métodos, acessar propriedades e atribuir valores a variáveis tipadas sem restrições — e sem segurança.
let val: any = getData();
val.someMethod(); // TypeScript: OK. Runtime: possible crash

Apresentando unknown

`unknown` é o tipo superior seguro. Assim como `any`, ele pode conter qualquer valor. Ao contrário de `any`, você não pode usá-lo sem primeiro refinar o tipo.
let val: unknown = getData();
// val.someMethod(); // Error: Object is of type 'unknown'

Refinando unknown antes do uso

Para usar um valor `unknown`, você precisa refinar seu tipo com uma verificação de tipo. Em seguida, o TypeScript permite operações sobre o tipo refinado.
let input: unknown = getInput();
if (typeof input === 'string') {
  console.log(input.toUpperCase()); // OK — narrowed to string
}

unknown não pode ser atribuído a tipos específicos

Não é possível atribuir `unknown` a um tipo específico sem uma verificação ou asserção. Isso obriga você a validar o valor antes de usá-lo.
let x: unknown = 'hello';
// let s: string = x; // Error
let s: string = x as string; // OK with assertion

Usando unknown em blocos de captura

No TypeScript 4.0 e posteriores, os erros capturados usam `unknown` por padrão. Isso é mais seguro do que o padrão antigo `any`, pois obriga você a verificar o tipo do erro.
try {
  doSomething();
} catch (err: unknown) {
  if (err instanceof Error) {
    console.log(err.message); // safe
  }
}

unknown para dados externos

Ao analisar JSON ou receber dados de uma API, atribua primeiro o tipo `unknown` aos dados e valide-os antes de usá-los.
const raw: unknown = JSON.parse(text);
if (
  typeof raw === 'object' &&
  raw !== null &&
  'name' in raw
) {
  console.log((raw as any).name);
}

Protetores de tipo com unknown

Os protetores de tipo definidos pelo usuário funcionam perfeitamente com `unknown`, permitindo validar estruturas complexas antes de usá-las.
function isUser(val: unknown): val is { name: string } {
  return typeof val === 'object' && val !== null && 'name' in val;
}

unknown versus never

`unknown` é o tipo superior: todos os tipos podem ser atribuídos a ele. `never` é o tipo inferior: nada pode ser atribuído a ele. Eles são opostos.
// unknown: anything can be assigned to it
let a: unknown = 42; // OK

// never: nothing can be assigned to it
function fail(): never { throw new Error(); }

Escolhendo entre any e unknown

Use `unknown` quando receber dados de tipo indeterminado (JSON, entrada do usuário ou APIs externas). Use `any` apenas como último recurso durante uma migração ou com bibliotecas sem tipos.

Bibliotecas de validação em tempo de execução

Bibliotecas como Zod, Valibot e io-ts combinam perfeitamente com `unknown`. Elas analisam e validam os dados, retornando um valor com tipo definido a partir de uma entrada `unknown`.
import { z } from 'zod';
const UserSchema = z.object({ name: z.string(), age: z.number() });
const user = UserSchema.parse(unknownData); // throws if invalid

Verificação rápida

O que você precisa fazer antes de poder usar um valor `unknown` no TypeScript?

Recapitulação

`unknown` é a alternativa segura a `any`. Ele aceita qualquer valor, mas obriga você a refinar o tipo antes do uso. Use-o para dados externos, blocos de captura e qualquer situação em que o tipo seja realmente desconhecido.

Perguntas Frequentes

A aula “unknown versus any: a escolha mais segura” é grátis?

Sim — o texto completo de “unknown versus any: a escolha mais segura” é 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 4 aulas no total.

O que vou aprender em “unknown versus any: a escolha mais segura”?

Aprenda por que unknown obriga você a verificar os tipos antes de usá-los. 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 3 de 4.

Quanto tempo leva a aula “unknown versus any: a escolha mais segura”?

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

  1. Tipos primitivos: string, number, boolean
  2. O tipo any e por que evitá-lo
  3. unknown versus any: a escolha mais segura
  4. null, undefined e verificações estritas de null
← Voltar para TypeScript Academy