Поиск по сайту
Ctrl + K
Вопросы по TS

Что такое оператор типа keyof в TypeScript?

Оператор keyof в TypeScript – это мощный инструмент, который позволяет получать типы ключей объекта в виде união типов. Это может быть чрезвычайно полезно при работе с объектами, так как дает возможность избегать ошибок при доступе к свойствам объектов.

Пример использования

Рассмотрим простой объект:

interface User {
    id: number;
    name: string;
    email: string;
}

Теперь мы можем использовать оператор keyof, чтобы создать новый тип, который будет содержать ключи этого интерфейса:

type UserKeys = keyof User; // "id" | "name" | "email"

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

Применение в функциях

Оператор keyof часто используется для создания функций, которые действуют с объектами по ключам. Рассмотрим функцию, которая получает значение свойства объекта по его ключу:

function getValue<T, K extends keyof T>(obj: T, key: K): T[K] {
    return obj[key];
}

const user: User = {
    id: 1,
    name: 'John Doe',
    email: 'john@example.com',
};

const userName = getValue(user, 'name'); // 'John Doe'
const userId = getValue(user, 'id'); // 1

// Ошибка: Argument of type '"age"' is not assignable to parameter of type '"id" | "name" | "email"'.
// const userAge = getValue(user, 'age');

В данном примере функция getValue принимает объект и ключе, гарантируя, что ключ принадлежит объекту. Если мы попытаемся передать ключ, которого нет в объекте (например, 'age'), TypeScript выдаст ошибку.

Заключение

Оператор keyof является важным инструментом для работы с типами в TypeScript, позволяя разработчикам быть более уверенными в типах и уменьшать количество ошибок. Используя keyof, вы можете создать более безопасный и надежный код, особенно при работе с объектами и их свойствами.