Напиши тип 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 ошибок.