0Pricing
TypeScript Academy · Aula

Por que satisfies Existe

Entenda a diferença entre anotação e inferência que satisfies preenche.

Por que satisfies Existe é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 1 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.

A tensão entre os dois objetivos

Quando declara um config, geralmente quer duas coisas: validação em relação a uma estrutura conhecida e inferência precisa dos valores literais. Muitas vezes, essas metas entram em conflito.

type Color = "red" | "green" | "blue";
// We want both: check the values AND remember exactly which ones.

A Anotação Perde o Estreitamento Literal

Adicionar uma anotação de tipo valida o objeto, mas widened os valores. O compilador esquece os literais exatos que escreveu.

type Config = { color: string; retries: number };
const cfg: Config = { color: "red", retries: 3 };
// cfg.color is string, not "red" anymore.
console.log(cfg.color.toUpperCase());

Por Que o Alargamento Prejudica

Se color for ampliado para string, perde a capacidade de usá-lo em locais que exigem o literal específico, como ao indexar outro tipo.

const cfg = { color: "red" } as { color: string };
// const exact: "red" = cfg.color; // Error: string not assignable to "red"
console.log(cfg.color);

Sem Anotação, Perde-se a Validação

Remover a anotação mantém a inferência precisa, mas elimina a rede de segurança. Erros de digitação e estruturas incorretas passam despercebidos.

const cfg = { color: "rad", retries: 3 };
// No error on the typo "rad" because nothing validates it.
console.log(cfg.color);

A Lacuna de Validação

Sem uma verificação, um valor inválido, como uma cor escrita incorretamente, percorre silenciosamente o programa e pode causar uma falha longe de onde o erro foi cometido.

const palette = { primary: "blu" }; // typo, no error
console.log(palette.primary); // "blu"

Conheça o Operador satisfies

O operador satisfies valida uma expressão em relação a um tipo e, ao mesmo tempo, preserva o tipo inferido com precisão. O melhor dos dois mundos.

type Config = { color: string; retries: number };
const cfg = { color: "red", retries: 3 } satisfies Config;
console.log(cfg.color); // type is "red", value validated

satisfies Mantém os Literais

Depois de satisfies, cfg.color ainda é o literal "red", não o string amplo. A inferência é preservada.

type Config = { color: string };
const cfg = { color: "red" } satisfies Config;
const exact: "red" = cfg.color; // OK
console.log(exact);

satisfies Também Valida

Se o objeto não corresponder ao tipo, satisfies relata um erro, assim como uma anotação faria.

type Config = { retries: number };
// const bad = { retries: "three" } satisfies Config; // Error
const good = { retries: 3 } satisfies Config;
console.log(good.retries);

O Exemplo Motivador

Considere um mapa de rotas em que as chaves precisam ser rotas conhecidas e os valores são nomes de manipuladores. Queremos preenchimento automático nas chaves AND valores validados, e é isso que satisfies oferece.

type Routes = Record<string, { method: "GET" | "POST" }>;
const routes = {
  home: { method: "GET" },
  submit: { method: "POST" }
} satisfies Routes;
console.log(routes.home.method); // "GET" literal

Comparando as Três Abordagens

Anotação: valida e amplia. Sem anotação: precisa, mas não validada. satisfies: valida e mantém a precisão. A terceira opção vence para configs.

type C = { color: string };
const a: C = { color: "red" };          // widened
const b = { color: "red" };             // unvalidated
const c = { color: "red" } satisfies C; // validated + precise
console.log(a.color, b.color, c.color);

Quando Usar satisfies

Use satisfies sempre que definir um valor constante que precise estar em conformidade com um tipo, mas também quiser usar seu conteúdo exato mais tarde.

type Sizes = Record<string, number>;
const sizes = { sm: 8, md: 16, lg: 24 } satisfies Sizes;
// keys "sm" | "md" | "lg" stay known for autocomplete
console.log(sizes.md);

Verificação Rápida: Por Que Usar satisfies

Teste sua compreensão sobre o motivo da existência de satisfies.

Recapitulação: Por Que satisfies Existe

Você aprendeu que as anotações validam, mas ampliam; que a ausência de anotação preserva a precisão, mas não valida; e que satisfies oferece validação junto com inferência precisa, o ideal para objetos de configuração.

type C = { color: string };
const c = { color: "blue" } satisfies C;
const exact: "blue" = c.color;
console.log(exact);

Perguntas Frequentes

A aula “Por que satisfies Existe” é grátis?

Sim — o texto completo de “Por que satisfies Existe” é 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 “Por que satisfies Existe”?

Entenda a diferença entre anotação e inferência que satisfies preenche. 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 4.

Quanto tempo leva a aula “Por que satisfies Existe”?

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. Por que satisfies Existe
  2. satisfies versus Anotação de Tipo
  3. satisfies versus Asserção as
  4. Padrões Práticos com satisfies
← Voltar para TypeScript Academy