TypeScript Academy · Урок

TypeScript 5.0: стандартные декораторы и параметры типов const

Используйте новое предложение о декораторах и обобщённые параметры const

Урок 1 из 413 шагов

«TypeScript 5.0: стандартные декораторы и параметры типов const» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Обзор TypeScript 5.0

В TypeScript 5.0 появились стандартизированное предложение TC39 о декораторах (этап 3), параметры типов const, новый синтаксис модулей с дословным сохранением и значительные улучшения производительности.

// TS 5.0 release: March 2023
// npm install typescript@5

Декораторы этапа 3

TS 5.0 реализует официальное предложение TC39 о декораторах этапа 3 — оно отличается от экспериментальных декораторов старого формата. Больше не требуется experimentalDecorators: true.

// New standard decorator — no experimentalDecorators flag needed
function logged(target: Function, ctx: ClassDecoratorContext) {
  return class extends (target as any) {
    constructor(...args: any[]) {
      console.log("Creating", target.name);
      super(...args);
    }
  };
}

@logged
class User { constructor(public name: string) {} }

Объект контекста декоратора

Новые декораторы получают типизированный объект ClassDecoratorContext или MethodDecoratorContext с метаданными о декорируемом элементе.

function sealed(_: Function, ctx: ClassDecoratorContext) {
  ctx.addInitializer(function(this: any) {
    Object.seal(this);
  });
}

Декораторы методов в TS 5.0

Декораторы методов получают сам метод и объект ClassMethodDecoratorContext, заменяя старую сигнатуру (target, key, descriptor).

function measure(_: Function, ctx: ClassMethodDecoratorContext) {
  return function(this: any, ...args: any[]) {
    const start = performance.now();
    const result = (_.apply as any)(this, args);
    console.log(ctx.name, performance.now() - start, "ms");
    return result;
  };
}

Параметры типов const

Добавление const к параметру типа заставляет TypeScript выводить литеральные типы аргументов вместо расширения их до базового типа.

function identity<const T>(val: T): T { return val; }
const a = identity("hello");      // type: "hello" (not string)
const b = identity([1, 2, 3]);    // type: readonly [1, 2, 3]

Обобщённые типы const и as const

Параметры типов const автоматически применяют эффект сужения — вызывающим сторонам не нужно добавлять as const в каждом месте вызова.

// Without const param: callers need as const
function makeRoute<T extends string>(path: T) { return path; }
const r1 = makeRoute("/home" as const); // "/home"

// With const param: automatic
function makeRoute2<const T extends string>(path: T) { return path; }
const r2 = makeRoute2("/home"); // "/home" — no as const needed

Разрешение модулей для сборщика

В TS 5.0 появился параметр moduleResolution: "bundler" для проектов, использующих Vite, esbuild или аналогичные сборщики, которые самостоятельно разрешают модули.

{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "bundler"
  }
}

verbatimModuleSyntax

verbatimModuleSyntax: true требует использовать import type для импортов только типов, предотвращая утечку импорта во время выполнения.

// tsconfig.json
{ "compilerOptions": { "verbatimModuleSyntax": true } }

// Now this errors: must be import type
import { User } from "./types"; // Error if User is only a type
import type { User } from "./types"; // OK

Улучшения производительности

TS 5.0 улучшил кэширование создания типов и производительность сужения типов, благодаря чему большие проекты работают быстрее без изменений в коде.

# TS 5.0 compile benchmarks: ~10-15% faster on large projects

Миграция с декораторов старого формата

Декораторы старого формата experimentalDecorators по-прежнему работают, но со временем их поддержка будет прекращена. Перейдите на декораторы TC39 для совместимости в будущем.

// Legacy: requires experimentalDecorators: true
@Component({ selector: "app-root" })
class AppComponent {}

// New TC39 decorator: no flag needed (but Angular/NestJS need updates)

Итоги: TypeScript 5.0

В TypeScript 5.0 появились стандартные декораторы TC39, параметры типов const для автоматического вывода литеральных типов, moduleResolution: "bundler", verbatimModuleSyntax и значительный прирост производительности.

Быстрая проверка

Что делает const у параметра типа?

Что вы узнали

TypeScript 5.0: стандартные декораторы TC39 заменяют экспериментальные, параметры типов const автоматически сужают аргументы до литеральных типов, moduleResolution: "bundler" поддерживает современные инструменты сборки, а verbatimModuleSyntax требует использовать import type.

Можно начать бесплатно

Изучай TypeScript с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
101
Уроки
352

Часто задаваемые вопросы

Урок «TypeScript 5.0: стандартные декораторы и параметры типов const» бесплатный?

Да — полный текст урока «TypeScript 5.0: стандартные декораторы и параметры типов const» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «TypeScript 5.0: стандартные декораторы и параметры типов const»?

Используйте новое предложение о декораторах и обобщённые параметры const Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «TypeScript 5.0: стандартные декораторы и параметры типов const»?

Большинство уроков 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