Microsoft/TypeScript

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

オープン

#54,131 opened on 2023/05/04

 (2 件のコメント) (0 件のリアクション) (0 人の担当者)TypeScript (13,395 件のフォーク)batch import
BugDomain: Index TypesHelp Wanted

Repository metrics

Stars
 (108,860 個のスター)
PR merge metrics
 (PR metrics pending)

説明

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.

コントリビューターガイド