-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Open
Labels
Domain: Completion ListsThe issue relates to showing completion lists in an editorThe issue relates to showing completion lists in an editorEffort: ModerateRequires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual".Requires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual".Experience EnhancementNoncontroversial enhancementsNoncontroversial enhancementsExperimentation NeededSomeone needs to try this out to see what happensSomeone needs to try this out to see what happensHelp WantedYou can do thisYou can do thisSuggestionAn idea for TypeScriptAn idea for TypeScript
Milestone
Description
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:
allergens
is optionnal- We switch from an interface to a type
- We use
keyof this['quantities']
instead ofINGREDIENTS[]
misode, MMK21Hub, MulverineX, Beatso and soqb
Metadata
Metadata
Assignees
Labels
Domain: Completion ListsThe issue relates to showing completion lists in an editorThe issue relates to showing completion lists in an editorEffort: ModerateRequires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual".Requires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual".Experience EnhancementNoncontroversial enhancementsNoncontroversial enhancementsExperimentation NeededSomeone needs to try this out to see what happensSomeone needs to try this out to see what happensHelp WantedYou can do thisYou can do thisSuggestionAn idea for TypeScriptAn idea for TypeScript