В вашем отображаемом типе есть ошибка, которую вы, вероятно, хотите использовать O[K]
вместо O[T]
, поэтому вы получите { [K in T]: O[K] }
. Вам нужен тип для каждого ключа K
, а не тип всех свойств в объединении T
.
Также я бы использовал Pick
, поскольку Pick
является homomorphi c и сохранит модификаторы такие как readonly
и optional
.
Кроме того, obj?: never
, вероятно, не делает то, что вы хотите, что-либо назначаемое на never
, лучше не указывать параметр в этой перегрузке:
export function pick<O, T extends keyof O>(keys: T[], obj?: O): Pick<O, T>;
export function pick<T>(keys: T[]): Mapper;
export function pick<O, T extends keyof O>(keys: T[], obj?: O) {
//....
}
Playground Link