Изучение различных методов указания типов ключей в TypeScript

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

  1. Подпись индекса:
    Подпись индекса позволяет определить конкретный тип ключей объекта. Он обозначается квадратными скобками и желаемым типом ключа внутри аннотации типа объекта. Вот пример:
interface MyObject {
  [key: string]: number;
}
const obj: MyObject = {
  age: 25,
  score: 90,
};
  1. Типы литералов:
    Вы можете использовать типы литералов, чтобы указать определенные значения в качестве ключей. Это гарантирует, что только эти точные значения будут разрешены в качестве ключей. Вот пример:
type MyKey = "name" | "age" | "score";
interface MyObject {
  [key in MyKey]: number;
}
const obj: MyObject = {
  name:  "John",
  age: 25,
  score: 90,
};
  1. Типы объединения:
    Типы объединения позволяют указать несколько возможных типов ключей. Это может быть полезно, если вы хотите разрешить разные типы ключей для разных свойств. Вот пример:
interface MyObject {
  name: string;
  age: number;
  [key: string | symbol]: any;
}
const obj: MyObject = {
  name: "John",
  age: 25,
  [Symbol("id")]: 123,
};
  1. Сопоставленные типы.
    Сопоставленные типы позволяют преобразовывать существующие типы в новые типы. Вы можете использовать сопоставленные типы для динамического указания типов ключей на основе других предопределенных типов. Вот пример:
type MyObject<T> = {
  [P in keyof T]: number;
};
const obj: MyObject<{ name: string; age: number }> = {
  name: "John",
  age: 25,
};

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