-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Closed
Labels
BugA bug in TypeScriptA bug in TypeScriptFix AvailableA PR has been opened for this issueA PR has been opened for this issueHas ReproThis issue has compiler-backed repros: https://aka.ms/ts-reprosThis issue has compiler-backed repros: https://aka.ms/ts-repros
Milestone
Description
Bug Report
(I'm not even sure how to properly name that issue 🙃 )
🔎 Search Terms
typescript inheritance protected intersection
🕗 Version & Regression Information
Seen it recently in 4.6.2. Update to 4.7.3 without changing the behaviour (and 4.8.0 nightly in the playground). I don't know if it was here before.
- I was unable to test this on prior versions because this triggered with unrelated change elsewhere in my code
⏯ Playground Link
Playground link with relevant code
💻 Code
class Foo {
protected foo = 0;
}
class Bar {
protected foo = 0;
}
type Nothing<V extends Foo> = void;
type Broken<V extends Array<Foo | Bar>> = {
readonly [P in keyof V]: V[P] extends Foo ? Nothing<V[P]> : never;
};
🙁 Actual behavior
(error located at the V[P]
in Nothing<V[P]>
)
Type 'Foo & V[P]' does not satisfy the constraint 'Foo'.
Property 'foo' is missing in type 'Foo & V[P]' but required in type 'Foo'.
Changing foo
from protected
to public
in either Foo
or Bar
makes the error disappear.
Removing (or renaming) protected foo = 0
from either Foo
or Bar
makes the error disappear.
Replacing the Array<Foo | Bar>
in Broken
by Array<Foo>
makes the error disappear.
🙂 Expected behavior
Since V[P]
is already in a type guard that is the same as the constraint for Nothing
, this should not generate any typing error.
Metadata
Metadata
Assignees
Labels
BugA bug in TypeScriptA bug in TypeScriptFix AvailableA PR has been opened for this issueA PR has been opened for this issueHas ReproThis issue has compiler-backed repros: https://aka.ms/ts-reprosThis issue has compiler-backed repros: https://aka.ms/ts-repros