type A = {[x:string]:string}
type B = keyof A // string | number
// ^?
const A:A = {a:"abc",[1]:"xyz"}
type C = keyof A & string // string
// ^?
normally this will not cause any issue, because number key in javascript will coerce into string key
however this may cause issue if we are doing some type manipulation
to solve this we can intersect it with string or set keyofStringsOnly
to true in the ts config
or just use Record<string, T>
or {[x in string]: T}
this is work as expected
more on github PR and release note
Top comments (0)