Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про TypeScript: typescript

Для чего нужен оператор keyof и typeof в ts? Что выведет keyof от typeof?

Этот вопрос проверяет понимание мощных операторов TypeScript для работы с типами на основе существующих значений и их структур.

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

typeof в TypeScript (в контексте типов) используется для получения типа переменной или константы. keyof используется для получения типа, представляющего все ключи (имена свойств) другого типа. Комбинация keyof typeof сначала получает тип значения с помощью typeof, а затем извлекает тип его ключей с помощью keyof. Это позволяет создать union-тип из имен свойств объекта, определенного как константа.

Длинный ответ

Эти операторы являются основой для создания динамических и строго типизированных конструкций в TypeScript.

Tupeof(Type Query Operator)

В TypeScript typeof может использоваться в двух контекстах:

  • В значении: Как в JavaScript, возвращает строку с названием типа переменной в рантайме.

  • В типе: Извлекает тип переменной, объявленной с помощью const, let или function.

const person = { name: 'Alice', age: 30 };

// `typeof person` в контексте типа извлекает тип объекта { name: string; age: number; }
type PersonType = typeof person;
// Эквивалентно: type PersonType = { name: string; age: number; }

keyof (Index Type Query Operator)

keyof принимает тип объекта и производит union-тип его ключей.

type Person = { name: string; age: number };
type PersonKeys = keyof Person; // Результат: "name" | "age"

Комбинация keyof typeof

Эта комбинация чрезвычайно полезна, когда у вас есть объект-константа, и вы хотите создать тип из его ключей.

// Допустим, у нас есть конфигурационный объект
const AppConfig = {
  theme: 'dark',
  language: 'en',
  version: '1.0.0'
} as const; // `as const` делает свойства readonly литералами

// 1. `typeof AppConfig` дает тип: { readonly theme: "dark"; readonly language: "en"; readonly version: "1.0.0"; }
// 2. `keyof typeof AppConfig` берет ключи этого типа.
type ConfigKey = keyof typeof AppConfig; // Результат: "theme" | "language" | "version"

// Теперь мы можем использовать этот тип для функции
function getConfig(key: ConfigKey) {
  return AppConfig[key];
}

getConfig('theme'); // OK
getConfig('invalidKey'); // Ошибка TS: Аргумент не может быть присвоен типу "theme" | "language" | "version"

Вывод: Операторы keyof и typeof (и особенно их комбинация) — это мощные инструменты для выведения типов из существующего JavaScript-кода, что позволяет писать более безопасный и сопровождаемый TypeScript-код, избегая дублирования.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • TypeScript

    TypeScript

Ключевые слова

#typescript

Подпишись на React Developer в телеграм