TypeScript 5.3–5.4: nova restrição de tipos e NoInfer
Aplique o utilitário NoInfer e a nova restrição de tipos em switch/case
TypeScript 5.3–5.4: nova restrição de tipos e NoInfer é 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.
Visão geral do TypeScript 5.3
O TypeScript 5.3 (novembro de 2023) trouxe um refinamento aprimorado para instruções switch/case, suporte a importações de tipos no JSDoc e modo de resolução em import type.
// npm install typescript@5.3Aprimoramento do refinamento em switch/case
O TS 5.3 aprimorou o refinamento de tipos dentro de instruções switch, especialmente para uniões discriminadas com vários casos.
type Result = { status: "ok"; data: string } | { status: "err"; code: number };
function handle(r: Result) {
switch (r.status) {
case "ok":
console.log(r.data); // r: { status: "ok"; data: string } — narrowed
break;
case "err":
console.log(r.code); // r: { status: "err"; code: number } — narrowed
break;
}
}Importação de tipo no JSDoc
O TS 5.3 adicionou suporte à anotação JSDoc @import para importações somente de tipos em arquivos JavaScript.
/** @import { User } from "./types.js" */
/** @param {User} user */
function greet(user) {
console.log(user.name);
}Modo de resolução em importação de tipo
O TS 5.3 permite especificar resolution-mode em import type para controlar se a importação será resolvida como CommonJS ou ESM.
import type { User } from "some-library" with { "resolution-mode": "require" };Visão geral do TypeScript 5.4
O TypeScript 5.4 (março de 2024) introduziu o tipo utilitário NoInfer, preservou o refinamento de tipos em fechamentos e adicionou os tipos de Object.groupBy e Map.groupBy.
// npm install typescript@5.4Tipo utilitário NoInfer<T>
NoInfer impede que o TypeScript use um argumento genérico como ponto de inferência, fazendo com que o tipo seja inferido somente a partir dos outros argumentos.
function createStore<T>(initial: T, onChange: (val: NoInfer<T>) => void) {
// T inferred from initial, not from onChange callback
}
createStore({ count: 0 }, (val) => {
// val: { count: number } — inferred from initial only
});Por que NoInfer é importante
Sem NoInfer, o TypeScript tentaria inferir T a partir dos dois argumentos e poderia ampliar o tipo inesperadamente.
// Before NoInfer: T may be widened by the callback
function createStore<T>(initial: T, onChange: (val: T) => void) {}
createStore({ count: 0 }, (val: { count: number; extra: string }) => {});
// T widened to include extra — not what we wantRefinamento preservado após fechamentos
O TS 5.4 preserva o refinamento de tipos em fechamentos quando a variável refinada não recebe uma atribuição depois do fechamento.
function process(val: string | null) {
if (!val) return;
// val: string
setTimeout(() => {
console.log(val.toUpperCase()); // TS 5.4: still string — not widened
}, 100);
}Tipagem de Object.groupBy
O TS 5.4 adicionou tipos para os métodos estáticos Object.groupBy e Map.groupBy do ES2024.
const users = [
{ name: "Alice", role: "admin" },
{ name: "Bob", role: "user" },
];
const grouped = Object.groupBy(users, (u) => u.role);
// grouped: { [role: string]: { name: string; role: string }[] }Geração aprimorada de declarações
O TS 5.4 aprimorou a geração de arquivos de declaração em casos complexos que envolvem tipos mapeados e condicionais, reduzindo falsos erros em arquivos .d.ts gerados.
// Fewer "Type ... is not assignable to type ..." errors
// in generated declaration files from TS 5.4 onwardRecapitulação: TS 5.3–5.4
TS 5.3: refinamento aprimorado em switch/case e suporte a @import no JSDoc. TS 5.4: NoInfer para bloquear pontos de inferência de tipos indesejados, refinamento preservado em fechamentos e tipos de Object.groupBy.
Verificação rápida
O que NoInfer impede?
O que você aprendeu
O TS 5.3 aprimorou o refinamento em switch/case e adicionou importações de tipos no JSDoc. O TS 5.4 introduziu NoInfer para controlar os pontos de inferência, preservou o refinamento em fechamentos e adicionou tipos de Object.groupBy para o ES2024.
Perguntas Frequentes
A aula “TypeScript 5.3–5.4: nova restrição de tipos e NoInfer” é grátis?
Sim — o texto completo de “TypeScript 5.3–5.4: nova restrição de tipos e NoInfer” é 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 “TypeScript 5.3–5.4: nova restrição de tipos e NoInfer”?
Aplique o utilitário NoInfer e a nova restrição de tipos em switch/case 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 “TypeScript 5.3–5.4: nova restrição de tipos e NoInfer”?
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
- TypeScript 5.0: padrão de decoradores e parâmetros const de tipo
- TypeScript 5.1–5.2: inferência aprimorada
- TypeScript 5.3–5.4: nova restrição de tipos e NoInfer
- TypeScript 5.5+: declarações isoladas e além