As novidades do TypeScript 5.5
typescript
A versão final do TypeScript 5.5 foi lançada nesta semana, trazendo muitas novidades que podem ajudar desenvolvedores a escrever código mais eficiente, seguro e alinhado com as últimas novidades do ECMAScript. Vamos explorar as principais mudanças e como elas beneficiam diretamente o seu trabalho.

Inferência de Predicados de Tipo

A inferência automática de predicados de tipo significa que o TypeScript agora pode determinar o tipo retornado por funções que verificam tipos. Isso simplifica o código, reduz a necessidade de declarações explícitas e melhora a precisão dos tipos retornados.
Exemplo: Antes:
function isString(value: any): value is string { return typeof value === "string"; }
Agora:
function isString(value: any) { return typeof value === "string"; } // TypeScript infere automaticamente o predicado de tipo
Benefício: Menos código redundante e mais precisão nos tipos.

Estreitamento de Fluxo de Controle para Acessos Indexados Constantes

O TypeScript 5.5 melhora a verificação de tipos ao acessar elementos de arrays ou objetos com índices constantes, resultando em código mais seguro e menos propenso a erros.
function f1(obj: Record<string, unknown>, key: string) { if (typeof obj[key] === "string") { // Agora isso é permitido, anteriormente era um erro obj[key].toUpperCase(); } }
Neste exemplo, o TypeScript entende que, se typeof obj[key] === "string", então obj[key] pode ser tratado como uma string após essa verificação, permitindo o uso de métodos de string como toUpperCase() sem gerar erros de tipo.
Benefício: Esse aprimoramento melhora a precisão da verificação de tipos e reduz a necessidade de declarações adicionais, tornando o código mais claro e seguro.

Tag @import no JSDoc

A nova etiqueta @import no JSDoc traz uma simplificação significativa na importação de tipos para verificação em JavaScript. Aqui está um resumo comparando o método antigo com o novo, incluindo exemplos de código:

Método Antigo

Antes, importar tipos sem causar erros de tempo de execução era complicado e repetitivo. Por exemplo:
Importação Direta (Erro em Tempo de Execução):
// ./some-module.d.ts export interface SomeType { // ... } // ./index.js import { SomeType } from "./some-module"; // ❌ runtime error! /** * @param {SomeType} myValue */ function doSomething(myValue) { // ... }
Importação de Namespace:
import * as someModule from "./some-module"; /** * @param {someModule.SomeType} myValue */ function doSomething(myValue) { // ... }
Uso de import(...) nos Comentários JSDoc:
/** * @param {import("./some-module").SomeType} myValue */ function doSomething(myValue) { // ... }
Uso de typedef para Evitar Repetição:
/** * @typedef {import("./some-module").SomeType} SomeType */ /** * @param {SomeType} myValue */ function doSomething(myValue) { // ... }

Novo Método com @import

A etiqueta @import simplifica esse processo:
Importação Nomeada Direta:
/** @import { SomeType } from "some-module" */ /** * @param {SomeType} myValue */ function doSomething(myValue) { // ... }
Importação de Namespace:
/** @import * as someModule from "some-module" */ /** * @param {someModule.SomeType} myValue */ function doSomething(myValue) { // ... }

Principais Benefícios

Simplicidade e Clareza: A importação de tipos é mais direta e menos propensa a erros.
Reutilização: Tipos podem ser reutilizados em vários lugares sem typedefs repetitivos.
Sem Impacto no Tempo de Execução: Como essas importações estão nos comentários, não afetam o comportamento do tempo de execução do código.

Novos Métodos do ECMAScript Set

Um dos destaques do TypeScript 5.5 é o suporte para novos métodos do tipo Set do ECMAScript. Métodos como union, intersection, difference e symmetricDifference pegam outro Set e retornam um novo Set como resultado. Métodos que retornam valores booleanos, como isSubsetOf, isSupersetOf e isDisjointFrom, também foram adicionados. Esses métodos não alteram os Sets originais e são muito aguardados desde 2018.
Exemplo de Set.prototype.intersection:
const setA = new Set([1, 2, 3]); const setB = new Set([2, 3, 4]); const intersection = setA.intersection(setB); // Set {2, 3}
Benefício: Mais funcionalidades e operações avançadas disponíveis nativamente.
 
A versão 5.5 do TypeScript também marca a desativação de funcionalidades obsoletas desde a versão 5.0, incluindo a opção ignoreDeprecations.
Com a nova versão, consumir APIs de módulos ECMAScript ficou mais fácil, graças à tag @import. A Microsoft já anunciou que a versão 5.6 estará disponível em setembro, continuando a evolução do TypeScript.
Essas atualizações tornam o desenvolvimento mais eficiente, seguro e alinhado com as novas funcionalidades do JavaScript. Para mais informações, confira a documentação oficial.
 

Aprenda programação do zero e DE GRAÇA

No Discover você vai descomplicar a programação, aprender a criar seu primeiro site com a mão na massa e iniciar sua transição de carreira.

COMECE A ESTUDAR AGORA