0Pricing
TypeScript Academy · Aula

satisfies versus Anotação de Tipo

Mantenha a inferência de literais enquanto valida a estrutura.

satisfies versus Anotação de Tipo é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 2 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.

O Padrão de Anotação

O padrão clássico const config: Type = {...} valida o objeto, mas o tipo da variável se torna Type, ampliando quaisquer literais contidos nela.

type Config = { mode: string; level: number };
const config: Config = { mode: "dark", level: 5 };
// config.mode has type string
console.log(config.mode);

Como é o Alargamento

Com a anotação, config.mode é string. Você não pode atribuí-lo a uma variável que espera o literal "dark".

type Config = { mode: string };
const config: Config = { mode: "dark" };
// const m: "dark" = config.mode; // Error: string not assignable to "dark"
console.log(config.mode);

O Padrão satisfies

Com const config = {...} satisfies Type, a variável mantém seu tipo inferido exact e ainda é verificada em relação a Type.

type Config = { mode: string; level: number };
const config = { mode: "dark", level: 5 } satisfies Config;
// config.mode has type "dark"
console.log(config.mode);

Inferência Exata Preservada

Agora config.mode é o literal "dark", portanto funciona em qualquer lugar que exija o tipo mais estreito.

type Config = { mode: string };
const config = { mode: "dark" } satisfies Config;
const m: "dark" = config.mode; // OK
console.log(m);

Ambos Continuam Validando

Ambos os padrões rejeitam objetos inválidos. A diferença está apenas no tipo resultante da variável, não no fato de a validação acontecer.

type Config = { level: number };
// const a: Config = { level: "x" }; // Error
// const b = { level: "x" } satisfies Config; // Error
const ok = { level: 3 } satisfies Config;
console.log(ok.level);

Propriedades Extras São Detectadas

Assim como as anotações, satisfies sinaliza propriedades excedentes que não estão no tipo de destino, ajudando a detectar erros de digitação nas chaves.

type Config = { mode: string };
// const c = { mode: "dark", extar: true } satisfies Config; // Error: extar
const c = { mode: "dark" } satisfies Config;
console.log(c.mode);

Preservando a Natureza de Tupla

satisfies também ajuda os arrays a manterem uma precisão semelhante à de tupla quando combinado com as const, sem deixar de validar os tipos dos elementos.

type Nums = readonly number[];
const xs = [1, 2, 3] as const satisfies Nums;
// xs is a readonly tuple [1, 2, 3], validated as numbers
console.log(xs.length);

A Anotação Amplia os Membros da União

Se um campo for uma união como "a" | "b", uma anotação tipada como a união o mantém como união, mas um tipo de campo mais amplo o amplia. satisfies fixa o membro exato.

type Config = { tier: string };
const withAnn: Config = { tier: "pro" };       // tier: string
const withSat = { tier: "pro" } satisfies Config; // tier: "pro"
console.log(withAnn.tier, withSat.tier);

Mantendo o Preenchimento Automático nas Leituras

Como satisfies preserva chaves e valores literais, os editores podem oferecer preenchimento automático com base no objeto exato, não no tipo declarado mais amplo.

type Theme = Record<string, string>;
const theme = { bg: "black", fg: "white" } satisfies Theme;
// theme.<autocomplete shows bg and fg>
console.log(theme.bg, theme.fg);

Escolhendo Entre Eles

Use uma anotação simples quando realmente quiser o tipo mais amplo. Use satisfies quando quiser validação, mas também precisar da estrutura inferida com precisão depois.

type Config = { mode: string };
// Want wide type for reassignment flexibility -> annotation
let a: Config = { mode: "dark" };
// Want exact literals for later indexing -> satisfies
const b = { mode: "dark" } satisfies Config;
console.log(a.mode, b.mode);

Um Resumo Lado a Lado

A anotação amplia; satisfies preserva. Ambos validam. Para configs imutáveis que serão lidos, satisfies costuma ser a melhor opção padrão.

type C = { color: string; size: number };
const widened: C = { color: "red", size: 1 };
const exact = { color: "red", size: 1 } satisfies C;
console.log(widened.color, exact.color);

Verificação Rápida: satisfies vs Anotação

Teste sua compreensão da diferença.

Recapitulação: satisfies vs Anotação de Tipo

Uma anotação de tipo valida, mas amplia os literais para seus tipos básicos. O operador satisfies valida e mantém a inferência exata, preservando valores literais, chaves e a precisão de tupla.

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

Perguntas Frequentes

A aula “satisfies versus Anotação de Tipo” é grátis?

Sim — o texto completo de “satisfies versus Anotação de Tipo” é 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 “satisfies versus Anotação de Tipo”?

Mantenha a inferência de literais enquanto valida a estrutura. 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 2 de 4.

Quanto tempo leva a aula “satisfies versus Anotação de Tipo”?

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