Выбор ответа Middle Условные и mapped-типы обновлено
Фильтрация ключей через as
Вопрос
Какой тип у S?
type OnlyStrings<T> = {
[K in keyof T as T[K] extends string ? K : never]: T[K];
};
type S = OnlyStrings<{ id: number; name: string; email: string }>;
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: { name: string; email: string }. Если в as ключ превращается в never, такое поле выбрасывается из результата. id имеет тип number, не проходит условие и исчезает.
Варианты ответа
{ name: string; email: string }правильный ответ{ id: never; name: string; email: string }{ id: number; name: string; email: string }'name' | 'email'
Разбор
Если в as ключ превращается в never, такое поле выбрасывается из результата. id имеет тип number, не проходит условие и исчезает. Остаются строковые поля.
Поле с типом never получилось бы, если бы условие стояло в значении, а не в ключе. Объединение ключей дала бы конструкция с индексом [keyof T] в конце.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.