-
-
Notifications
You must be signed in to change notification settings - Fork 662
Open
Labels
enhancementNew feature or requestNew feature or request
Description
type Foo = { foo: "bar" } | { bar: "foo" };
type Bar = { foo: "baz" } | { baz: "qux" };
({ foo: "baz" }) satisfies Merge<Foo, Bar>;results in error:
error TS1360: Type '{ foo: "baz"; }' does not satisfy the expected type 'Merge<Foo, Bar>'.
Type '{ foo: "baz"; }' is not assignable to type '{ bar: "foo"; foo: "baz"; } | { bar: "foo"; baz: "qux"; } | { bar: "foo"; foo: "baz"; } | { bar: "foo"; baz: "qux"; } | { bar: "foo"; foo: "baz"; } | { bar: "foo"; baz: "qux"; } | { bar: "foo"; foo: "baz"; } | { bar: "foo"; baz: "qux"; }'.
Property 'bar' is missing in type '{ foo: "baz"; }' but required in type '{ bar: "foo"; foo: "baz"; }'.
15 ({ foo: "baz" }) satisfies Merge<Foo, Bar>;
However, this does work:
type DistributedMerge<
A extends object,
B extends object,
> = A extends object ? (B extends object ? Merge<A, B> : never) : never;
type Foo = { foo: "bar" } | { bar: "foo" };
type Bar = { foo: "baz" } | { baz: "qux" };
({ foo: "baz" }) satisfies DistributiveMerge<Foo, Bar>;Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request