microsoft / microsoft/TypeScript

A contextually-typed signature coming from correlated union can't be assigned back to source of its contextual type

Offen
#61,676 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Domain: check: Contextual Types Help Wanted Possible Improvement
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

### 🔎 Search Terms

correlated union signature union map mapped type index

### 🕗 Version & Regression Information

- This is the behavior in every version I tried

### ⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.9.0-dev.20250508#code/C4TwDgpgBAIhBmBLAdo4iD2yDOUC8UA3gFBRRYBiGGAXFANoCGATgOZ3ICuAtgEYTMAugG5S5ZACEWdJmzrZgzFKxHEAvqOKhIUAMoZuEAMKMANqd6MAxgGtcBEmXoBpKCig2IIDPFgIUaJg4gnQAFAB0kSys2HRwSKjoWNguggCU+AB8UABuGIgAJqIaxMRWycBQAO7MjGAm5pa2+FAAPK4QAB7AEMgFuJ7evvqGDRbWdpmhYtgYnMxWEHQjxmbjttgANGLA0RDAywarjRNbYoN0ztsZeNmOUOU4lVZrTTYts-OL9IOqO3vAH5eQQtCJRNjYG53MRkRC+UIAWUYwAAFuFan0DKEMtkAAzhACsGXuZDIzH282QD1eEzB4WikNEpKgajEJRKxHgnGQViSVJqdQAguZQi8ThtDqMaRs0pLjus7EQxI8FNVamBIAUWoQ1FBGLgVmM3tgmVB4BhmFBQqZ9h4vG4qWKFZClcyBfVpTZRZ6tmq6prNnaQHqBl4fHojkbTmlTayyRTmPz1ZrisQgA

### 💻 Code

```ts
type Definitions = {
onFoo: [arg: number];
onBar: [arg: string];
};

type SomeCallbacks = {
[K in keyof Definitions]: (...args: Definitions[K]) => void;
};

const wrapCallback = (
source: SomeCallbacks,
target: SomeCallbacks,
key: K,
) => {
const callback = source[key];

target[key] = (...args) => {
if (Math.random() > 0.5) {
return callback(...args);
}
};
};

function wrapAll(callbacks: SomeCallbacks): SomeCallbacks {
const wrapped = {} as SomeCallbacks;
for (let key in callbacks) {
wrapCallback(callbacks, wrapped, key as keyof SomeCallbacks);
}
return wrapped;
}
```

### 🙁 Actual behavior

It fails to recognize that this function is assignable to `target[key]` despite the fact that `args` are contextually-typed by that `target[key]`

### 🙂 Expected behavior

I'd expect this to typecheck just fine

### Additional information about the issue

_No response_

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, den Fehler im verlinkten TypeScript Playground anhand des bereitgestellten Beispiels für eine korrelierte Union und einen gemappten Typ zu reproduzieren. Verfolge den Type-Checking-Pfad für den kontextuell typisierten Callback und seine Zuweisung zu target[key]; die Aufgabe ist abgeschlossen, wenn das Beispiel wie erwartet typgeprüft wird, ohne die gemeldeten Typbeziehungen abzuschwächen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.