0Pricing
TypeScript Academy · Урок

Свежесть и проверка лишних свойств

Узнайте, почему лишние свойства в некоторых контекстах вызывают ошибки

«Свежесть и проверка лишних свойств» — бесплатный урок 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 }; // OK

Readonly и лишние свойства

Проверка лишних свойств применяется и к типам объектов 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 — локальная установка не требуется.

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

  1. Механика расширения и сужения типов
  2. Контекстная типизация: вывод из контекста
  3. Свежесть и проверка лишних свойств
  4. Утверждения const и as const
← Назад к TypeScript Academy