TypeScript – мощный язык программирования, который обеспечивает статическую типизацию в JavaScript. Он предоставляет различные функции, которые повышают удобство сопровождения кода и производительность разработчиков. Одной из таких функций является оператор «keyof typeof», который позволяет нам извлекать ключи заданного типа. В этой статье мы углубимся в мир «keyof typeof» и изучим его практическое применение, продемонстрировав несколько методов на примерах кода.
- Перечисление ключей объекта:
Оператор «keyof typeof» можно использовать для извлечения ключей из типа объекта. Давайте рассмотрим пример, где у нас есть объект, представляющий человека:
type Person = {
name: string;
age: number;
occupation: string;
};
type PersonKeys = keyof typeof Person;
// Output: "name" | "age" | "occupation"
console.log(PersonKeys);
- Автоматическое создание API:
Используя «keyof typeof» вместе с сопоставленными типами, мы можем автоматически генерировать API для объектов. Вот пример, который генерирует методы получения и установки для объекта конфигурации:
type Config = {
backgroundColor: string;
fontSize: number;
textColor: string;
};
type ConfigAPI = {
[K in keyof typeof Config]: {
get(): Config[K];
set(value: Config[K]): void;
};
};
const config: Config = {
backgroundColor: "white",
fontSize: 14,
textColor: "black",
};
const configAPI: ConfigAPI = {
backgroundColor: {
get: () => config.backgroundColor,
set: (value) => {
config.backgroundColor = value;
},
},
fontSize: {
get: () => config.fontSize,
set: (value) => {
config.fontSize = value;
},
},
textColor: {
get: () => config.textColor,
set: (value) => {
config.textColor = value;
},
},
};
configAPI.backgroundColor.set("blue");
console.log(configAPI.backgroundColor.get()); // Output: "blue"
- Обеспечение использования ключей объекта.
Используя «keyof typeof», мы можем обеспечить наличие у объекта определенных ключей. Вот пример, в котором мы разрешаем объекты только с определенными свойствами:
function processUser(user: { id: string; name: string; email: string }) {
// Process user data
}
type RequiredProperties = keyof typeof {
id: never;
name: never;
email: never;
};
function createUser(data: Record<RequiredProperties, unknown>) {
processUser(data as { id: string; name: string; email: string });
}
createUser({ id: "123", name: "John", email: "john@example.com" }); // Valid
createUser({ id: "123", name: "John" }); // Error: missing "email" property
Оператор «keyof typeof» в TypeScript открывает мир возможностей, позволяя нам манипулировать ключами объектов и работать с ними типобезопасным образом. В этой статье мы рассмотрели несколько методов, включая перечисление ключей объекта, автоматическое создание API и принудительное использование ключей объекта. Используя этот мощный оператор, разработчики могут повысить читаемость и удобство обслуживания кода, а также снизить вероятность ошибок во время выполнения.