Для статической проверки отсутствия допустимых свойств можно использовать 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 при необходимости выполняются отдельно.