keyof any
représente le type de toute valeur qui peut être utilisée comme index d'un objet. Actuellement, vous pouvez utiliser string
o number
o symbol
pour indexer un objet.
let a: any;
a['a'] //ok
a[0] // ok
a[Symbol()] //ok
a[{}] // error
Dans le Record
type, ce K extends keyof any
est utilisé pour contraindre K
à quelque chose qui est une clé valide pour un objet. Ainsi, K
pourrait être 'prop'
o '1'
o string
mais pas {a : string}
:
type t0 = Record<1, string> // { 1: string }
type t1 = Record<"prop", string> // { prop: string }
type t3 = Record<string, string> // { [name: string]: string }
type t4 = Record<number, string> // { [name: number]: string }
type t5 = Record<{a : string}, string> // error
La contrainte est là, puisque quel que soit le type passé dans le fichier K
deviendront les clés du type résultant, et donc K
doit être quelque chose qui est une clé valide pour un objet.