microsoft / microsoft/TypeScript
Missing property incompatible error when there is a namespace with a value export
Open
Nobody has claimed this yet.
Bug
Domain: Index Types
Help Wanted
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.4k
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 117
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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the linked TypeScript Playground and compare the diagnostics for Bar, Baz, and Quux. Trace the type compatibility path for an interface merged with a namespace that exports a value; done means Baz reports the same incompatible index-signature error as Bar and Quux.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 42/100