Изучение TypeScript: извлечение ключей объекта из другого объекта

В TypeScript работа с объектами — обычная задача. Иногда вам может потребоваться извлечь ключи из одного объекта на основе ключей другого объекта. В этом сообщении блога мы рассмотрим различные методы достижения этой цели в TypeScript. Мы будем использовать разговорный язык и приведем примеры кода, чтобы его было легко понять и реализовать.

Метод 1: использование оператора keyof
Оператор keyof в TypeScript позволяет нам извлекать ключи типа объекта. Мы можем использовать этот оператор вместе с ключевым словом typeof для извлечения ключей другого объекта. Вот пример:

type Person = {
  name: string;
  age: number;
  address: string;
};
const person: Person = {
  name: 'John Doe',
  age: 30,
  address: '123 Main Street',
};
type PersonKeys = keyof typeof person;
console.log(PersonKeys); // Output: "name" | "age" | "address"

Метод 2: использование Object.keys() и утверждения типа.
Другой подход заключается в использовании метода Object.keys() вместе с утверждением типа для извлечения ключей из объекта. Вот пример:

const person: Person = {
  name: 'John Doe',
  age: 30,
  address: '123 Main Street',
};
const personKeys = Object.keys(person) as (keyof typeof person)[];
console.log(personKeys); // Output: ["name", "age", "address"]

Метод 3: использование служебной функции
Мы также можем создать служебную функцию, которая принимает два объекта в качестве параметров и возвращает ключи второго объекта на основе ключей первого объекта. Вот пример:

function extractKeys<T, K extends keyof T>(source: T, target: T): K[] {
  return Object.keys(source).filter((key) => key in target) as K[];
}
const person: Person = {
  name: 'John Doe',
  age: 30,
  address: '123 Main Street',
};
const extractedKeys = extractKeys<Person, keyof Person>(person, person);
console.log(extractedKeys); // Output: ["name", "age", "address"]

В этой записи блога мы рассмотрели различные методы извлечения ключей объекта из другого объекта в TypeScript. Мы узнали об использовании оператора keyof, методе Object.keys() с утверждением типа и создании служебной функции. У каждого метода есть свои преимущества, поэтому выберите тот, который лучше всего подходит для вашего конкретного случая использования.

Поняв эти методы, вы сможете эффективно работать с объектами TypeScript и манипулировать их ключами по мере необходимости.