TypeScript 5.0: стандартные декораторы и параметры типов const
Используйте новое предложение о декораторах и обобщённые параметры const
«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 — локальная установка не требуется.
Все уроки этого курса
- TypeScript 5.0: стандартные декораторы и параметры типов const
- TypeScript 5.1–5.2: улучшенный вывод типов
- TypeScript 5.3–5.4: новое сужение типов и NoInfer
- TypeScript 5.5+: изолированные объявления и далее