microsoft / microsoft/TypeScript
Incorrect inference/autocompletion on generic arrays, when values can be inferred from a defined object.
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
TypeScript Version: 4.1.2
Search Terms:
Autocompletion, incorrect, values, inference, generic, array, object, keys
Summary:
When an interface/a type has an object with generic keys, and an array of those keys, the array values cannot be infered from the object keys.
Code
interface Recipe<INGREDIENTS extends string> {
quantities: Record<INGREDIENTS, number>
allergens?: INGREDIENTS[]
}
function createRecipe<INGREDIENTS extends string>(recipe: Recipe<INGREDIENTS>) {}
createRecipe({
quantities: {
eggs: 1,
flour: 2,
},
allergens: ['']
})
Expected behavior:
Here, when trying to give a value to allergens, the autocompletion should show "eggs" | "flour".
Actual behavior:
The autocompletion doesn't find anything.

Notes:
The other way is working: you can fill the array first, then the object keys will autocomplete - but this rarely make sense to write things that way.
Failed workarounds:
This bug is still present, even when:
allergensis optionnal- We switch from an interface to a type
- We use
keyof this['quantities']instead ofINGREDIENTS[]
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das TypeScript-4.1.2-Beispiel aus dem Issue zu reproduzieren, wobei du dich auf die Inferenz vom quantities-Objekt in das allergens-Array und dessen Autovervollständigungsergebnisse konzentrierst. Vergleiche das berichtete Verhalten mit der umgekehrten Reihenfolge. Betrachte das Issue als erledigt, wenn "eggs" und "flour" als Ergänzungen für allergens angeboten werden, ohne die generischen Typen des Beispiels zu ändern.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 38/100