Microsoft/TypeScript

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

Open

#62,176 opened on Aug 2, 2025

View on GitHub
ย (0 comments)ย (2 reactions)ย (0 assignees)TypeScriptย (48,455 stars)ย (6,726 forks)batch import
BugDomain: Mapped TypesHelp Wanted

Description

๐Ÿ”Ž 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 ๐Ÿ˜‰

Contributor guide

No error on self-referencing type parameter of non-generic mapped type ยท Microsoft/TypeScript#62176 | Good First Issue