microsoft / microsoft/TypeScript

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

オープン
#62,779 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
Bug Domain: This-Typing Help Wanted
主要言語
Go
スター
111k
フォーク
14.3k
平均マージ
2日 4時間
マージ済み PR(30日)
132

説明

### 🔎 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

```ts
declare function test>(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_

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

リンクされた TypeScript Playground と提供された reverse-mapped type の例を使用して問題を再現します。オブジェクトメソッドが `this` を使用する場合に checker が戻り値の型をどのように推論するかを追跡し、その後、結果の `obj` 型がジェネリックパラメーター `T` を公開しなくなっていることを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
typescript
領域
compilers
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
38/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。