Microsoft/TypeScript

Type parameter leak caused by `this` and reverse mapped type

Open

#62779 opened on Nov 18, 2025

View on GitHub
 (1 comment) (0 reactions) (0 assignees)TypeScript (48,455 stars) (6,726 forks)batch import
BugDomain: This-TypingHelp Wanted

Description

🔎 Search Terms

type parameter leak reverse mapped type type variable this

🕗 Version & Regression Information

  • This is the behavior in every version I tried

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=6.0.0-dev.20251030#code/CYUwxgNghgTiAEAzArgOzAFwJYHtXwxAGcMAeAFXhAA9DVgj4AlcHGYUkmLVAcwBp4aANaocAd1QA+KQAocAIwBWALngBvAFDx4AbQDS8HvGEgAnjkTxyAXTWyAlPAC8U6wZsBuTQF8Ha8m9NMDwSeEUlFwJiDFktHQB6BJ14AD0Afm14KEcNLJ04DGQYfAAGbx0ffiyFXPiUwuL8DAALLCIAOhyHCvgq3x7NTSA

💻 Code

declare function test<T extends Record<string, unknown>>(obj: {
  [K in keyof T]: () => T[K];
}): T;

const obj = test({
  //   ^? const obj: { a: number; b: T[string]; }
  a() {
    return 0;
  },
  b() {
    return this.a();
  },
});

🙁 Actual behavior

obj's type refers to T[string]

🙂 Expected behavior

T definitely shouldn't leak into obj's type

Additional information about the issue

No response

Contributor guide