TypeScript 5.1–5.2: улучшенный вывод типов
Изучите независимость типов геттеров и сеттеров и объявления using
«TypeScript 5.1–5.2: улучшенный вывод типов» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Обзор TypeScript 5.1
TypeScript 5.1, выпущенный в июне 2023 года, улучшил независимость типов сеттеров и геттеров, гибкость типов элементов JSX, связанные курсоры в редакторах и оптимизацию производительности.
// npm install typescript@5.1Независимость типов методов чтения и записи
До версии 5.1 сеттер и геттер должны были использовать один и тот же тип. Теперь геттер может возвращать более широкий тип, чем принимает сеттер, — это удобно для паттернов приведения типов.
class Temperature {
get celsius(): string { return this._c + "°C"; } // string
set celsius(value: string | number) { // string | number
this._c = Number(value);
}
private _c = 0;
}Неопределённое значение как дочерний элемент JSX
TS 5.1 позволяет компонентам напрямую возвращать undefined из функции отрисовки (в дополнение к null), что соответствует поведению React 18.
// TS 5.1+: OK
function Widget(): undefined { return undefined; }
// Before 5.1: had to return null or JSX elementГибкость типа элемента JSX
Новое ограничение JSX.ElementType предоставляет больше гибкости для пользовательских фабрик JSX, что полезно в средах без React.
// Custom JSX element types supported more naturally in 5.1Обзор TypeScript 5.2
В TypeScript 5.2 (выпущенном в августе 2023 года) появились объявления using для явного управления ресурсами, метаданные декораторов и методы копирования массивов.
// npm install typescript@5.2Объявления для управления ресурсами
using реализует предложение по явному управлению ресурсами: метод [Symbol.dispose]() ресурса вызывается, когда ресурс выходит из области видимости.
// Requires lib: ["es2022", "esnext.disposable"]
function getConnection(): Disposable {
const conn = openDb();
return { [Symbol.dispose]() { conn.close(); } };
}
{
using conn = getConnection();
// conn.close() called automatically at block end
}Асинхронное освобождение ресурсов
await using работает подобно using, но вызывает асинхронный метод [Symbol.asyncDispose](), обеспечивая асинхронную очистку.
async function run() {
await using db = await connectDb();
// db[Symbol.asyncDispose]() called on exit
}Метаданные декораторов
TS 5.2 реализует предложение TC39 о метаданных декораторов, позволяя декораторам добавлять метаданные с помощью Symbol.metadata.
function meta(value: string) {
return (_: unknown, ctx: DecoratorContext) => {
ctx.metadata[ctx.name] = value;
};
}
@meta("service")
class MyService {}
console.log((MyService as any)[Symbol.metadata]); // { "MyService": "service" }Методы копирования массивов
В TS 5.2 появились типы для Array.prototype.toSorted, toReversed, toSpliced и with — неизменяемых операций над массивами из ES2023.
const arr = [3, 1, 2];
const sorted = arr.toSorted(); // [1, 2, 3] — new array, arr unchanged
const reversed = arr.toReversed(); // [2, 1, 3]Использование в tsconfig для версии 5.2
Чтобы использовать объявления using, включите библиотеку esnext.disposable в tsconfig.
{
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "ESNext.Disposable"]
}
}Итоги: TS 5.1–5.2
TS 5.1: независимые типы геттера и сеттера, возврат undefined из JSX. TS 5.2: объявления using для автоматического освобождения ресурсов, метаданные декораторов и типы неизменяемых методов копирования массивов.
Быстрая проверка
Что делает объявление using в TypeScript 5.2?
Чему вы научились
В TS 5.1 появились независимые типы геттера и сеттера и возврат undefined из JSX. В TS 5.2 появились объявления using для автоматического управления ресурсами, метаданные декораторов и типы неизменяемых методов массивов из ES2023.
Часто задаваемые вопросы
Урок «TypeScript 5.1–5.2: улучшенный вывод типов» бесплатный?
Да — полный текст урока «TypeScript 5.1–5.2: улучшенный вывод типов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «TypeScript 5.1–5.2: улучшенный вывод типов»?
Изучите независимость типов геттеров и сеттеров и объявления using Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «TypeScript 5.1–5.2: улучшенный вывод типов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- TypeScript 5.0: стандартные декораторы и параметры типов const
- TypeScript 5.1–5.2: улучшенный вывод типов
- TypeScript 5.3–5.4: новое сужение типов и NoInfer
- TypeScript 5.5+: изолированные объявления и далее