Напиши тип Senior Условные и mapped-типы обновлено
Ключи-методы объекта
Вопрос
Какой тип получит FK? Впишите тип.
type FunctionKeys<T> = {
[K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
}[keyof T];
type FK = FunctionKeys<{ id: number; save(): void; load(): void }>; // /* ? */
Попробуйте сами
Напишите тип, как написали бы в коде.
Показать ответ и разбор
Коротко
Правильный тип: 'save' | 'load'. Mapped-тип заменяет значение каждого поля: для методов на имя ключа, для остальных на never.
Правильный тип
'save' | 'load'
Разбор
Mapped-тип заменяет значение каждого поля: для методов на имя ключа, для остальных на never. Получается { id: never; save: 'save'; load: 'load' }. Индекс [keyof T] собирает объединение всех значений, а never из объединения исчезает. Остаётся 'save' | 'load'.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Тип обработчиков из карты событий
Следующий вопрос
Геттеры через переназначение ключей