Я пытаюсь выразить существующий API в TypeScript, и у него есть функция, которая объединяет два параметра в одну форму в качестве третьего параметра.Моя попытка напечатать его до сих пор выглядит так (упрощенно):
type Difference<A, B> = Pick<A, Exclude<keyof A, keyof B>>
export const foo = <Props, A extends Difference<Props, B>, B extends Difference<Props, A>>(
props: Props,
a: A,
b: B,
): Props => ({ ...a, ...b }); // Type 'A & B' is not assignable to type 'Props'.
Props
- это желаемая форма, в которую A
и B
должны объединиться.Моя идея заключалась в том, чтобы сузить A
, чтобы расширить от его разницы с B
и наоборот, но это приводит к ошибке, замеченной в комментарии, хотя в противном случае она, кажется, ведет себя как ожидалось:
const props = { x: 1, y: 1 };
foo(props, { x: 1, z: 1 }, { y: 1 }); // Valid
foo(props, { x: 1 }, {}); // Error
foo(props, { x: 1, y: 1 }, {}); // Valid
СледуетЯ просто добавляю as unknown as Props
утверждение к возвращаемому значению?