Closed
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.
Activity
RyanCavanaugh commentedon Jun 13, 2022
Workaround
Jym77 commentedon Jun 14, 2022
Thanks. Workaround works fine in the real code too 😄
(infer T extends U)
pattern microsoft/rushstack#3486Jym77 commentedon Jun 20, 2022
It seems that the workaround breaks
api-extractor
😢(infer T extends U)
pattern should be valid. github/codeql#9621andrewbranch commentedon Jul 6, 2022
@typescript-bot bisect good v4.6.4 bad v4.7.4
typescript-bot commentedon Jul 6, 2022
The change between v4.6.4 and v4.7.4 occurred at 787bb9d.
andrewbranch commentedon Jul 6, 2022
Hey this is the second bisect today that blames #48837 😅
typescript-bot commentedon Jul 7, 2022
👋 Hi, I'm the Repro bot. I can help narrow down and track compiler bugs across releases! This comment reflects the current state of the repro in the issue body running against the nightly TypeScript.
Issue body code block by @Jym77
❌ Failed: -
Type 'Foo & V[P]' does not satisfy the constraint 'Foo'. Property 'foo' is missing in type 'Foo & V[P]' but required in type 'Foo'.
Historical Information
❌ Failed: -
Type 'Foo & V[P]' does not satisfy the constraint 'Foo'. Property 'foo' is missing in type 'Foo & V[P]' but required in type 'Foo'.
👍 Compiled