Есть mapped type: получите только ключи объекта, значения которых имеют тип string.

Сопоставьте каждому ключу сам ключ, если тип его значения совместим со string, иначе never; затем получите объединение результатов.

Короткий ответ

Что ответить на собеседовании

Сопоставьте каждому ключу сам ключ, если тип его значения совместим со string, иначе never; затем получите объединение результатов.

Подробный разбор

Ответ с пояснениями

Сопоставьте каждому ключу сам ключ, если тип его значения совместим со string, иначе never; затем получите объединение результатов.

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

type Result = StringKeys<{ name: string; age: number; code: 'x' }>;
// 'name' | 'code'

При strictNullChecks необязательное поле string | undefined не проходит эту проверку. Если его тоже нужно включать, отдельно согласуйте применение NonNullable и поведение union-типов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее