Этот вопрос проверяет понимание мощных операторов TypeScript для работы с типами на основе существующих значений и их структур.
typeof в TypeScript (в контексте типов) используется для получения типа переменной или константы. keyof используется для получения типа, представляющего все ключи (имена свойств) другого типа. Комбинация keyof typeof сначала получает тип значения с помощью typeof, а затем извлекает тип его ключей с помощью keyof. Это позволяет создать union-тип из имен свойств объекта, определенного как константа.
Эти операторы являются основой для создания динамических и строго типизированных конструкций в TypeScript.
В 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"Эта комбинация чрезвычайно полезна, когда у вас есть объект-константа, и вы хотите создать тип из его ключей.
// Допустим, у нас есть конфигурационный объект
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-код, избегая дублирования.