0Pricing
TypeScript Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. TypeScript 5.0: стандартные декораторы и параметры типов const
  2. TypeScript 5.1–5.2: улучшенный вывод типов
  3. TypeScript 5.3–5.4: новое сужение типов и NoInfer
  4. TypeScript 5.5+: изолированные объявления и далее
← Назад к TypeScript Academy