Que Record<K, T>
signifie dans Typescript?
Typescript 2.1 a introduit le Record
type, en le décrivant dans un exemple:
// For every properties K of type T, transform it to U function mapObject<K extends string, T, U>(obj: Record<K, T>, f: (x: T) => U): Record<K, U>
voir Typescript 2.1
Et les types avancés la page mentionne Record
sous les types cartographiées rubrique à côté Readonly
, Partial
et Pick
, dans ce qui semble être sa définition:
type Record<K extends string, T> = { [P in K]: T; }
Readonly, Partial et Pick sont homomorphes alors que Record ne l'est pas. Un indice que Record n'est pas homomorphe est qu'il ne prend pas de type d'entrée pour copier les propriétés:
type ThreeStringProps = Record<'prop1' | 'prop2' | 'prop3', string>
Et c'est tout. Outre les citations ci-dessus, il n'y a aucune autre mention de Record
sur typescriptlang.org .
Des questions
Quelqu'un peut-il donner une définition simple de ce que
Record
c'est?Est-ce
Record<K,T>
simplement une façon de dire "toutes les propriétés de cet objet auront un typeT
"? Probablement pas toutes les propriétés, car ellesK
ont un but ...Le
K
générique interdit-il les clés supplémentaires sur l'objet qui ne le sont pasK
, ou les autorise-t-il et indique-t-il simplement que leurs propriétés ne sont pas transformées enT
?Avec l'exemple donné:
type ThreeStringProps = Record<'prop1' | 'prop2' | 'prop3', string>
Est-ce exactement la même chose?:
type ThreeStringProps = {prop1: string, prop2: string, prop3: string}