Microsoft/TypeScript

No error on self-referencing type parameter of non-generic mapped type

Open

#62,176 opened on 2025幎8月2日

GitHub で芋る
 (0 comments) (2 reactions) (0 assignees)TypeScript (6,726 forks)batch import
BugDomain: Mapped TypesHelp Wanted

Repository metrics

Stars
 (48,455 stars)
PR merge metrics
 (平均マヌゞ 6d 17h) (30d で 9 merged PRs)

説明

🔎 Search Terms

mapped type circular self reference type parameter

🕗 Version & Regression Information

  • This is the behavior in every version I tried

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=6.0.0-dev.20250801#code/C4TwDgpgBAKhDOwoF4oGsIgPYDMoG8AoKKAbQAUoBLAO3U1ynIF0AuKAVxrRqwHcahAL4BuQoQAmEAMYAbAIYAnaNKw1EUYAmDs4iMYQgAPMFkVIcXacCpqoAcwjA9wABQBKAsSjLgHRXRa+sKEQA

💻 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 😉

コントリビュヌタヌガむド