> Как сделать функцию getProperty с типизацией и проверкой ключей в TypeScript? (TypeScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: IT-One

Стек: TypeScript

> Пример ответа

Вот реализация типизированной функции getProperty с проверкой ключей:

TYPESCRIPT
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
if (!(key in obj)) {
throw new Error(`Свойство "${String(key)}" отсутствует в объекте`);
}
return obj[key];
}

Как это работает:

  • T - тип объекта

  • K extends keyof T - гарантирует, что ключ является допустимым свойством объекта

  • T[K] - возвращаемый тип соответствует типу значения по указанному ключу

  • Проверка key in obj - runtime-валидация на случай, если ключ передан динамически

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

TYPESCRIPT
interface User {
name: string;
age: number;
}
const user: User = { name: 'Анна', age: 30 };
const name = getProperty(user, 'name'); // тип string
const age = getProperty(user, 'age'); // тип number
// getProperty(user, 'email'); // Ошибка компиляции: "email" не входит в keyof User

Дополнительно: Для строгой проверки на этапе компиляции можно использовать satisfies (TypeScript 4.9+):

TYPESCRIPT
function getPropertySafe<T extends Record<string, unknown>, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью