Хитрость, как я вижу, проблема в том, что Typescript, похоже, не позволяет вам частично предоставлять дженерики, вы должны либо предоставить их все явно, либо получить их все неявно. Было бы неплохо иметь синтаксис вроде . Вот лучшее, что я могу сделать
function use<Q, S extends keyof Q>(
q: Q,
properties: S[]
): {
[K in S]: Q[K];
} {
return {} as any;
}
type Test = {
a: boolean;
b: boolean;
c: boolean;
};
const t = use(<Test>null, ["a", "b"]);
В качестве альтернативы (я думаю, так лучше)
function use<Q>(): <S extends keyof Q>(p: S[]) => { [K in S]: Q[K] } {
return {} as any;
}
type Test = {
a: boolean;
b: boolean;
c: boolean;
};
const t = use<Test>()(["a", "b"]);
Надеюсь, кто-то сможет показать нам свет