Проблема
У меня есть значение, которое является пересечением между родовыми c object
A
и { _id: string }
.
Я хотел снова разделите это пересечение и верните _id
отдельно от остальных (в кортеже).
Итак, я попробовал следующее (что по логике должно работать):
function splitDataAndId<A extends object>(a: A & { _id: string }): [string, A] {
const { _id, ...data } = a;
return [_id, data]; // type error
}
Это производит ошибка следующего типа:
TS2322: Type 'Pick<A & { _id: string; }, Exclude<keyof A, "_id">>' is not assignable to
type 'A'. 'Pick<A & { _id: string; }, Exclude<keyof A, "_id">>' is assignable to the constraint of
type 'A', but 'A' could be instantiated with a different subtype of constraint 'object'.
Вопрос
Можно ли решить эту проблему путем улучшения типов или изменения реализации?