Вывод значения типа Result

Result будет объединением 'Field1' | 'Field2'. Mapped type оставляет имена полей, чьи типы совместимы со String, и заменяет остальные на never.

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

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

Result будет объединением 'Field1' | 'Field2'. Mapped type оставляет имена полей, чьи типы совместимы со String, и заменяет остальные на never.

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

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

Условие

Необходимо определить, какое значение получит тип Result.

 type ExampleType = {
  Field1: string
  Field2: string
  Field3: number
  Field4: boolean
}

type T1<S, T> = {
  [K in keyof S]: S[K] extends T ? K : never
}[keyof S];

type Result = T1<ExampleType, String>

Ответ

Result будет объединением 'Field1' | 'Field2'. Mapped type оставляет имена полей, чьи типы совместимы со String, и заменяет остальные на never.

Промежуточный объект содержит Field1: 'Field1', Field2: 'Field2', а Field3 и Field4 имеют тип never. Индексирование через [keyof S] собирает значения в union; never из него исчезает. Примитивный string совместим с интерфейсом String, поэтому строковые поля проходят условие. Однако для обычных строк правильнее писать T1<ExampleType, string>: заглавный String обозначает объектную обёртку и редко нужен в прикладных аннотациях.

Источник: www.typescriptlang.org.

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

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

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

Подробнее