Как типизировать пустой объект так, чтобы он всегда оставался пустым объектом?

Для статической проверки отсутствия допустимых свойств можно использовать Record<PropertyKey, never>. Тип {} для этого не подходит и не означает «пустой объект».

Короткий ответ

Что ответить на собеседовании

Для статической проверки отсутствия допустимых свойств можно использовать Record<PropertyKey, never>. Тип {} для этого не подходит и не означает «пустой объект».

Подробный разбор

Ответ с пояснениями

Для статической проверки отсутствия допустимых свойств можно использовать Record<PropertyKey, never>. Тип {} для этого не подходит и не означает «пустой объект».

type EmptyObject = Record<PropertyKey, never>;
const empty: EmptyObject = {};
// const wrong: EmptyObject = { value: 1 }; // ошибка

Это ограничение TypeScript, а не гарантия неизменности во время выполнения. any, assertions или внешние данные могут его обойти; проверка собственных ключей и Object.freeze при необходимости выполняются отдельно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее