Изучение возможностей «keyof typeof» в TypeScript: подробное руководство

TypeScript – мощный язык программирования, который обеспечивает статическую типизацию в JavaScript. Он предоставляет различные функции, которые повышают удобство сопровождения кода и производительность разработчиков. Одной из таких функций является оператор «keyof typeof», который позволяет нам извлекать ключи заданного типа. В этой статье мы углубимся в мир «keyof typeof» и изучим его практическое применение, продемонстрировав несколько методов на примерах кода.

  1. Перечисление ключей объекта:
    Оператор «keyof typeof» можно использовать для извлечения ключей из типа объекта. Давайте рассмотрим пример, где у нас есть объект, представляющий человека:
type Person = {
  name: string;
  age: number;
  occupation: string;
};
type PersonKeys = keyof typeof Person;
// Output: "name" | "age" | "occupation"
console.log(PersonKeys);
  1. Автоматическое создание 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"
  1. Обеспечение использования ключей объекта.
    Используя «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 и принудительное использование ключей объекта. Используя этот мощный оператор, разработчики могут повысить читаемость и удобство обслуживания кода, а также снизить вероятность ошибок во время выполнения.