-
Notifications
You must be signed in to change notification settings - Fork 13.1k
Closed
Labels
DuplicateAn existing issue was already createdAn existing issue was already created
Description
TypeScript Version: 2.4.2
Code
(Note this is a simplified example and easy to workaround, but it gets dirtier in a real-world code)
type Obj<B> = { body: B };
function acceptPartial<O extends Obj<string>>(obj: Partial<O>) {}
function acceptFull<O extends Obj<string>>(obj: O) {
acceptPartial<O>({
body: obj['body']
});
}Expected behavior:
No type errors.
Actual behavior:
temp.ts(8,22): error TS2345: Argument of type '{ body: string; }' is not assignable to parameter of type 'Partial<O>'.
This doesn't make much sense because { body: obj['body'] } is correctly determined as { body: string } which is same as Obj<string>, and so compatible with Partial<Obj<string>> and any Partial<O> in this context.
Moreover, calling acceptPartial<Obj<string>> instead of O works which seems to mean that Partial doesn't currently "understand" that Partial<O> is just a superset of Partial<Obj<string>> when O extends Obj<string>.
Metadata
Metadata
Assignees
Labels
DuplicateAn existing issue was already createdAn existing issue was already created