Que Record<K, T>signifie dans Typescript?
Typescript 2.1 a introduit le Recordtype, 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 Recordsous les types cartographiées rubrique à côté Readonly, Partialet 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 Recordsur typescriptlang.org .
Des questions
Quelqu'un peut-il donner une définition simple de ce que
Recordc'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 ellesKont un but ...Le
Kgé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}