Что означает Record<K, T> в Typescript?
Typescript 2.1 представил тип Record, описав его в примере:
// 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>
см. Typescript 2.1
А на странице " Расширенные типы" упоминается " Record под заголовком " Readonly типы" наряду с " Readonly, " Partial и " Pick, что, как представляется, является ее определением:
type Record<K extends string, T> = { [P in K]: T; }Только для чтения, Partial и Pick гомоморфны, а Record - нет. Один признак того, что Record не является гомоморфным, заключается в том, что для копирования свойств не требуется тип ввода:
type ThreeStringProps = Record<'prop1' | 'prop2' | 'prop3', string>
И это оно. Помимо приведенных цитат, нет других упоминаний о Record на typescriptlang.org.
Вопросы
-
Может кто-нибудь дать простое определение того, что такое
Record? -
Является ли
Record<K,T>просто способом сказать "все свойства этого объекта будут иметь типT"? Вероятно, не все свойства, так какKимеет какое-то назначение... -
Запрещает ли общий тип
Kдополнительные ключи на объекте, которые не являютсяK, или он разрешает их и просто указывает, что их свойства не преобразуются вT? -
С приведенным примером:
type ThreeStringProps = Record<'prop1' | 'prop2' | 'prop3', string>Это точно так же, как это?
type ThreeStringProps = {prop1: string, prop2: string, prop3: string}