> Какие альтернативы использованию infer в TypeScript для типизации ключей? (TypeScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: RecruitTech
Стек: TypeScript
> Пример ответа
В TypeScript для типизации ключей объекта без использования infer можно применить несколько подходов.
1. Утилитарные типы keyof и in keyof
Самый прямой способ - использовать keyof для получения объединения ключей:
TYPESCRIPTtype Keys = keyof { a: number; b: string }; // "a" | "b"
2. Условные типы с extends
Для фильтрации ключей по значению:
TYPESCRIPTtype StringKeys<T> = {[K in keyof T]: T[K] extends string ? K : never}[keyof T];
3. Маппированные типы с as (TypeScript 4.1+)
Для трансформации ключей:
TYPESCRIPTtype PrefixedKeys<T> = {[K in keyof T as `prefix_${string & K}`]: T[K]};
4. Шаблонные литеральные типы
Для валидации строковых ключей по шаблону:
TYPESCRIPTtype ValidKey = `item_${number}`;
5. Рекурсивные типы
Для вложенных структур:
TYPESCRIPTtype NestedKeys<T> = T extends object? { [K in keyof T]: K | `${string & K}.${NestedKeys<T[K]>}` }[keyof T]: never;
Эти методы покрывают большинство сценариев, где infer обычно применяется в условных типах для извлечения ключей из сложных конструкций (например, из Promise или функций).
> Похожие задачи по frontend
Что такое Pick в TypeScript и как его использовать?
Что такое Record в TypeScript и как его использовать?
Можно ли объединить несколько типов в один тип в TypeScript и как это сделать?
Как типизировать объект с разными ключами и значениями в TypeScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью