Свежесть и проверка лишних свойств
Узнайте, почему лишние свойства в некоторых контекстах вызывают ошибки
«Свежесть и проверка лишних свойств» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Что такое свежесть?
Свежесть — это понятие TypeScript, согласно которому литералы объектов считаются «свежими» в момент создания. Для свежих объектов выполняется строгая проверка лишних свойств, которая не применяется к расширенным объектам.
interface Point { x: number; y: number; }
const p: Point = { x: 1, y: 2, z: 3 }; // Error: 'z' not in PointПроверка лишних свойств на практике
Когда Вы непосредственно присваиваете литерал объекта переменной с заданным типом или передаёте его как аргумент функции, TypeScript сообщает о дополнительных свойствах, отсутствующих в целевом типе.
function setPoint(p: { x: number; y: number }) {}
setPoint({ x: 1, y: 2, z: 3 }); // Error: 'z' excess propertyЗачем нужна проверка лишних свойств
Она обнаруживает опечатки и непреднамеренные свойства в объектах конфигурации, которые часто становятся источником ошибок в JavaScript.
interface Options { timeout: number; retry?: boolean; }
const opts: Options = { timeout: 3000, retrey: true }; // Error — typo!Как утрачивается свежесть
После присваивания литерала объекта промежуточной переменной он перестаёт быть «свежим», и проверка лишних свойств больше не применяется к расширенному типу.
const opts = { timeout: 3000, retry: true, extra: "surprise" };
const o: Options = opts; // No error — freshness lost on assignmentУтверждения типов обходят проверку свежести
Утверждения типов с помощью as также обходят проверку лишних свойств, из-за чего ошибки могут остаться незамеченными.
const o = { timeout: 3000, typo: true } as Options; // No errorПроверка лишних свойств с типами пересечения
Типы пересечения иногда смягчают проверку лишних свойств, поскольку дополнительные свойства могут относиться к одному из составляющих типов.
type A = { x: number };
type B = { y: number };
const ab: A & B = { x: 1, y: 2 }; // OKReadonly и лишние свойства
Проверка лишних свойств применяется и к типам объектов readonly — это правило касается структурной формы, а не изменяемости.
interface Cfg { readonly host: string; }
const c: Cfg = { host: "localhost", port: 3000 }; // ErrorИндексные сигнатуры и лишние свойства
Добавление индексной сигнатуры к типу разрешает любые дополнительные свойства со строковыми ключами, фактически отключая для этого типа проверку лишних свойств.
interface Flexible { name: string; [key: string]: unknown; }
const f: Flexible = { name: "ts", extra: true }; // OKНеобязательные свойства и свежесть
Необязательные свойства не смягчают проверку лишних свойств. Свойство, отсутствующее в списке вообще, — даже если оно необязательное, — всё равно считается лишним.
interface Shape { color?: string; }
const s: Shape = { color: "red", size: 10 }; // Error: 'size' excessПрактические шаблоны
Чтобы передавать дополнительные свойства config через типизированный интерфейс без ошибок, используйте промежуточную переменную или индексную сигнатуру в интерфейсе.
// Option 1: intermediate variable (freshness lost)
const cfg = { timeout: 3000, debugMode: true };
const o: Options = cfg;
// Option 2: index signature in interfaceИтоги: свежесть
Свежесть применяется к свежим литералам объектов и позволяет проверять лишние свойства в момент присваивания. Чтобы разрешить дополнительные свойства, присвойте объект промежуточной переменной или используйте индексную сигнатуру.
Быстрая проверка
Когда проверка лишних свойств NOT применяется?
Что Вы узнали
Свежесть и проверка лишних свойств защищают от опечаток и непреднамеренных свойств в литералах объектов. Понимайте, когда свежесть утрачивается, чтобы избегать неожиданных ошибок типов и скрытых проблем.
Часто задаваемые вопросы
Урок «Свежесть и проверка лишних свойств» бесплатный?
Да — полный текст урока «Свежесть и проверка лишних свойств» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Свежесть и проверка лишних свойств»?
Узнайте, почему лишние свойства в некоторых контекстах вызывают ошибки Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Свежесть и проверка лишних свойств»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Механика расширения и сужения типов
- Контекстная типизация: вывод из контекста
- Свежесть и проверка лишних свойств
- Утверждения const и as const