Вийшов TypeScript 5.8: що нового

💡 Усі статті, обговорення, новини про Front-end — в одному місці. Приєднуйтесь до Front-end спільноти!

На початку березня Microsoft випустили TypeScript 5.8, який приніс значні покращення в безпеку типів, продуктивність та сумісність модулів.

У цій версії було вдосконалено перевірку повертаючих виразів з умовними та індексованими типами, покращено інтеграцію з модулями Node.js та додано оптимізації для швидшого вирішення проектів.

Основні зміни та покращення

Покращена перевірка типів і контроль повертаючих значень

До цього в TypeScript розробники власноруч перевіряли тип повертаючого значення перед використанням методів, таких як .join(),що могло призводити до помилок часу виконання. Тепер TypeScript 5.8 використовує умовні та індексовані типи для більш точної відповідності повертаючого значення параметрам функції:

async function showQuickPick<S extends SelectionKind>(
    prompt: string,
    selectionKind: S,
    items: readonly string[],
): Promise<QuickPickReturn<S>> {
    // Реалізація
}

Тепер TypeScript сам перевіряє відповідність типів під час компіляції, тож немає потреби вручну їх наводити, а помилки під час виконання траплятимуться рідше.

Крім того, у версії 5.8 покращено аналіз потоку керування, що дає змогу точніше визначати тип повертаючого значення на основі параметрів функції.

Покращенна сумісність модулів

Підтримка require() для ECMAScript-модулів у --module nodenext

Раніше CommonJS-модулі не могли імпортувати ECMAScript-модулі (ESM) через require(), що створювало труднощі для авторів бібліотек. TypeScript 5.8 вирішує цю проблему, дозволяючи використовувати require("esm") у файлах CommonJS за умови використання --module nodenext.

// CommonJS-файл
const myEsmExport = require("./some-esm-file.mjs");

Новий прапор —module node18

TypeScript 5.8 додає новий прапор --module node18 для користувачів Node.js 18. Тепер require() для ECMAScript-модулів заборонений у node18, але дозволений у nodenext. Застарілі import assertions допустимі в node18, але заборонені в nodenext.

Оптимізація продуктивності та збірки

Новий прапор --erasableSyntaxOnly для безпечного видалення типів

Node.js 23.6 додав експериментальну підтримку запуску TypeScript-файлів із --experimental-strip-types, але він не може видаляти синтаксис із семантикою виконання (наприклад, enum або namespace). У TypeScript 5.8 з’явився прапор --erasableSyntaxOnly, який гарантує використання лише такого синтаксису, що можна безпечно стерти:

class C {
    constructor(public x: number) { }
    // Такий синтаксис заборонено при ввімкненому 'erasableSyntaxOnly'.
}

Оновлена поведінка імпорту JSON

TypeScript 5.8 тепер підтримує новий синтаксис import attributes, який відповідає Node.js 22:

// Старий синтаксис (застарів) 
import data from "./file.json" assert { type: "json" }; 

// Новий синтаксис (рекомендований) 
import data from "./file.json" with { type: "json" };

При використанні --module nodenext TypeScript тепер видає помилки, якщо застосовуються застарілі import assertions.

Інші важливі зміни

  • Більш суворі типи DOM: Тепер типи подій вимагають явного вказання типів.
  • Зворотна несумісність .d.ts-файлів: Збережені обчислювані імена властивостей можуть не працювати в старих версіях TypeScript.

Як спробувати TypeScript 5.8

TypeScript 5.8 доступний для встановлення через команду npm install -D typescript або на платформі NuGet.

Як вам нові оновлення? Вже встигли оновитися, чи ще в процесі?

👍ПодобаєтьсяСподобалось5
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі