TypeScript: различные методы получения свойства объекта по имени

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

Метод 1: точечная нотация
Самый простой и распространенный способ доступа к свойствам объекта — использование точечной нотации. Однако запись через точку требует, чтобы имя свойства было известно во время компиляции.

interface Person {
  name: string;
  age: number;
}
const person: Person = {
  name: "John Doe",
  age: 30
};
const propertyName: string = "name";
const propertyValue = person[propertyName]; // Accessing property using variable
console.log(propertyValue); // Output: John Doe

Метод 2: обозначение скобок
Обозначение скобок позволяет динамически получать доступ к свойствам объекта с помощью строковой переменной.

const propertyName: string = "age";
const propertyValue = person[propertyName];
console.log(propertyValue); // Output: 30

Метод 3: использование Object.keys()
Метод Object.keys()возвращает массив имен собственных перечислимых свойств данного объекта. Затем вы можете использовать этот массив для динамического перебора и доступа к свойствам.

const propertyNames = Object.keys(person);
for (const propertyName of propertyNames) {
  const propertyValue = person[propertyName];
  console.log(`${propertyName}: ${propertyValue}`);
}

Метод 4: API Reflect
API Reflect предоставляет набор методов для выполнения отражающих операций над объектами, включая динамическое получение и настройку свойств объекта.

import Reflect from "reflect";
const propertyValue = Reflect.get(person, propertyName);
console.log(propertyValue); // Output: 30

Метод 5: дженерики TypeScript и keyof
Используя дженерики TypeScript и оператор keyof, вы можете создать функцию многократного использования, которая извлекает свойства объекта по имени.

function getProperty<T, K extends keyof T>(obj: T, propertyName: K): T[K] {
  return obj[propertyName];
}
const propertyValue = getProperty(person, propertyName);
console.log(propertyValue); // Output: 30

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

Не забудьте выбрать метод, который лучше всего подходит для вашего конкретного случая использования, учитывая такие факторы, как производительность, удобство обслуживания и читаемость кода.