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.
keyas typekeyof Twill get rid of your current error, but it also leads to another one (Type 'boolean' is not assignable to type 'T[keyof T]'.(2322))... I would just casttrueasT[keyof T], @jcalz explains this pretty well in another answer here.