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

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

Компании: RecruitTech

Стек: TypeScript

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

В TypeScript для типизации ключей объекта без использования infer можно применить несколько подходов.

1. Утилитарные типы keyof и in keyof
Самый прямой способ - использовать keyof для получения объединения ключей:

TYPESCRIPT
type Keys = keyof { a: number; b: string }; // "a" | "b"

2. Условные типы с extends
Для фильтрации ключей по значению:

TYPESCRIPT
type StringKeys<T> = {
[K in keyof T]: T[K] extends string ? K : never
}[keyof T];

3. Маппированные типы с as (TypeScript 4.1+)
Для трансформации ключей:

TYPESCRIPT
type PrefixedKeys<T> = {
[K in keyof T as `prefix_${string & K}`]: T[K]
};

4. Шаблонные литеральные типы
Для валидации строковых ключей по шаблону:

TYPESCRIPT
type ValidKey = `item_${number}`;

5. Рекурсивные типы
Для вложенных структур:

TYPESCRIPT
type NestedKeys<T> = T extends object
? { [K in keyof T]: K | `${string & K}.${NestedKeys<T[K]>}` }[keyof T]
: never;

Эти методы покрывают большинство сценариев, где infer обычно применяется в условных типах для извлечения ключей из сложных конструкций (например, из Promise или функций).

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

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