Код
#новости

Вышел TypeScript 4.6 Beta — сплошные улучшения и отладка багов

Разработчики изменили поведение кода перед методом super, а также добавили больше проверок на ошибки в JavaScript и многое другое.

Авторы языка программирования 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.


Проверьте свой английский. Бесплатно ➞
Нескучные задания: small talk, поиск выдуманных слов — и не только. Подробный фидбэк от преподавателя + персональный план по повышению уровня.
Пройти тест
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована