Arad
Arad

Reputation: 12695

"Type 'string' cannot be used to index type 'T'" when using generics

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'
}

Playground link

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

Answers (1)

Dominik Chudy
Dominik Chudy

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

Related Questions