Сопоставьте каждому ключу сам ключ, если тип его значения совместим со string, иначе never; затем получите объединение результатов.
Есть mapped type: получите только ключи объекта, значения которых имеют тип string.
Сопоставьте каждому ключу сам ключ, если тип его значения совместим со 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-типов.