Вышел TypeScript 4.6 Beta — сплошные улучшения и отладка багов
2026-02-21 18:50 Diff

Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.

Авторы языка программирования TypeScript официально выпустили версию 4.6 Beta. Они улучшили функционал языка и добавили несколько серьёзных изменений. Скачать обновление можно через NuGet или npm:

npm install typescript@beta

Конструкторы теперь разрешают использовать произвольный код перед методом super (). Раньше такое поведение вызвало бы ошибку, но в обновлении решили эту проблему. Сейчас у разработчиков есть возможность более гибко пользоваться конструкторами.

TypeScript научился правильно делать выводы об индексах типов, которые ссылаются на методы объектов. Например, код ниже показывает, что вызов функции record.f (record.v) — корректный.

interface TypeMap { "number": number; "string": string; "boolean": boolean; } type UnionRecord<P extends keyof TypeMap> = { [K in P]: { kind: K; v: TypeMap[K]; f: (p: TypeMap[K]) => void; } }[P]; function processRecord<K extends keyof TypeMap>(record: UnionRecord<K>) { record.f(record.v); } processRecord({ kind: "string", v: "hello!", // 'val' раньше бы имел неявный тип — 'string | number | boolean', // но теперь это будет просто 'string'. f: val => { console.log(val.toUpperCase()); } })

TypeScript исправляет проблему сравнения «бесконечно» вложенных типов. Код ниже в версиях языка 4.5 и меньше позволил бы сравнить две переменные x и y, потому что TypeScript проверяет вложенность только до определённого уровня. TypeScript 4.6 научился различать такие случаи и проверять «бесконечную» вложенность.

interface Foo<T> { prop: T; } declare let x: Foo<Foo<Foo<Foo<Foo<Foo<string>>>>>>; declare let y: Foo<Foo<Foo<Foo<Foo<string>>>>>; x = y;

Релиз 4.6 добавляет новый функционал для сигнатур методов. Ниже представлена функция с неопределённым количеством аргументов, но с одним изменением. Если первый переданный аргумент — строка str, то следующим аргументом должна быть переменная типа string, или если первый аргумент — строка num, то следующим аргументом обязана быть переменная типа number.

function func(...args: ["str", string] | ["num", number]) { // ... }

Кроме этого, TypeScript 4.6 добавляет больше синтаксических и привязочных ошибок, trace analyzer, проверку JavaScript-файлов на грамматические и привязочные ошибки и многое другое.

Подробный список изменений можно посмотреть на официальном блоге TypeScript.


Бесплатный курс по Python ➞
Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу