0Pricing
TypeScript Academy · Aula

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.3

Aprimoramento 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.4

Tipo 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 want

Refinamento 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 onward

Recapitulaçã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

  1. TypeScript 5.0: padrão de decoradores e parâmetros const de tipo
  2. TypeScript 5.1–5.2: inferência aprimorada
  3. TypeScript 5.3–5.4: nova restrição de tipos e NoInfer
  4. TypeScript 5.5+: declarações isoladas e além
← Voltar para TypeScript Academy