Skip to content

Indexed Access Types that should be the same as a given types are somehow different than that type, under strictNullChecks #30871

Closed
@Ryan1729

Description

@Ryan1729

TypeScript Version: 3.5.0-dev.20190411

Search Terms:
Indexed Access Types
Lookup Types
strictNullChecks

Code

type Foo = {bar: undefined} | {bar: string};

const b1: {bar: Foo["bar"]} = {bar: undefined};
const b2: Foo = b1;
const b3: Foo = {bar: undefined};

Expected behavior:
This should compile with strictNullChecks on. I expect {bar: Foo["bar"]} to be the same thing as Foo in this case.
Actual behavior:
running tsc --strictNullChecks .\bug.ts result in:

bug.ts:4:7 - error TS2322: Type '{ bar: string | undefined; }' is not assignable
 to type 'Foo'.
  Type '{ bar: string | undefined; }' is not assignable to type '{ bar: string;
}'.
    Types of property 'bar' are incompatible.
      Type 'string | undefined' is not assignable to type 'string'.
        Type 'undefined' is not assignable to type 'string'.

4 const b2: Foo = b1;
        ~~


Found 1 error.

Playground Link: Link

Related Issues:
#29042
#21975 This one is extremely similar but it and the ones it was marked as a duplicate of were closed. Is this a regression?

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScript

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions