Вийшов TypeScript 5.8: що нового
На початку березня 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.
Як вам нові оновлення? Вже встигли оновитися, чи ще в процесі?
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів