Microsoft/TypeScript

Missing property incompatible error when there is a namespace with a value export

Open

#54,131 opened on May 4, 2023

View on GitHub
 (2 comments) (0 reactions) (0 assignees)TypeScript (6,726 forks)batch import
BugDomain: Index TypesHelp Wanted

Repository metrics

Stars
 (48,455 stars)
PR merge metrics
 (Avg merge 6d 17h) (9 merged PRs in 30d)

Description

Bug Report

🔎 Search Terms

index signature, namespace

🕗 Version & Regression Information

  • This is the behavior in every version I tried: v4.9.4, v5.0.4

⏯ Playground Link

Playground link with relevant code

💻 Code

interface Dict {
  [key: string]: unknown;
}

interface Thing {}
interface ThingWithNamespaceWithValueExport {}
namespace ThingWithNamespaceWithValueExport {
  export const asdasd: string = '';
}
interface ThingWithNamespaceWithTypeExport {}
namespace ThingWithNamespaceWithTypeExport {
  export type asdasd = string;
}

interface Foo {
  prop?: Dict;
}
interface Bar extends Foo {
  //             ~~~ Interface 'Bar' incorrectly extends interface 'Foo'. Types of property 'prop' are incompatible. Type 'Thing' is not assignable to type 'Dict'. Index signature for type 'string' is missing in type 'Thing'.
  prop: Thing;
}
interface Baz extends Foo {
  // No error here. But I would expect the same error.
  prop: ThingWithNamespaceWithValueExport;
}
interface Quux extends Foo {
  //             ~~~~ Interface 'Quux' incorrectly extends interface 'Foo'. Types of property 'prop' are incompatible. Type 'ThingWithNamespaceWithTypeExport' is not assignable to type 'Dict'. Index signature for type 'string' is missing in type 'ThingWithNamespaceWithTypeExport'.
  prop: ThingWithNamespaceWithTypeExport;
}

🙁 Actual behavior

No error for interface Baz, where prop is the type of an interface with a namespace, which exports a value.

🙂 Expected behavior

Same error for Baz that we get for Bar and Quux.

Contributor guide