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
- Por que satisfies Existe
- satisfies versus Anotação de Tipo
- satisfies versus Asserção as
- Padrões Práticos com satisfies