Reputation: 12695
I'm using generics in TypeScript (v4.5.4) and the following code throws an error:
function foo<T extends Record<string, boolean>>(obj: T, key: string) {
obj[key] = true; // ERROR: Type 'string' cannot be used to index type 'T'
}
This makes no sense to me whatsoever, it's even more nonsensical given the fact that the following actually works with no errors:
const key: string = '';
const obj: Record<string, boolean> = {};
obj[key] = true; // NO ERROR
While as far I'm concerned the first code snippet is effectively doing the exact same thing.
I would like to know why this happens, and also how I could rectify the problem in the first snippet.
Upvotes: 3
Views: 1041
Reputation: 1080
As far as I know, this is a bug, which was discussed pretty deeply on GitHub. Here's the link: https://github.com/microsoft/TypeScript/issues/47357
Upvotes: 1