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