Что означает 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}