microsoft / microsoft/TypeScript
No error on self-referencing type parameter of non-generic mapped type
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
🔎 Search Terms
mapped type circular self reference type parameter
🕗 Version & Regression Information
- This is the behavior in every version I tried
⏯ Playground Link
💻 Code
type Test = keyof {
[P in keyof P]: unknown
};
declare const test: Test;
export function getTest() {
return test;
}
🙁 Actual behavior
[P in keyof P] doesn't error anyhow but it's clearly circular. Furthermore, the generated .d.ts here is:
export declare function getTest(): keyof P;
P leaked here and this is invalid
🙂 Expected behavior
I'd expect this to produce a circularity error and at the very least the generated declaration file should not contain a leaked type variable
Additional information about the issue
cc @jfet97 who originally mentioned part of this to me in a DM 😉
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 repro and verify both the missing circularity diagnostic and the leaked P in the generated declaration. Trace how the compiler handles [P in keyof P] and declaration output for this case. Done means the circular reference is reported and the emitted declaration contains no leaked type variable.
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
- 45/100