O que Record<K, T>
significa no texto datilografado?
O TypeScript 2.1 introduziu o Record
tipo, descrevendo-o em um exemplo:
// 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>
E o Tipos Avançada página menciona Record
sob os Tipos mapeadas em direção ao lado Readonly
, Partial
e Pick
, no que parece ser a sua definição:
type Record<K extends string, T> = { [P in K]: T; }
Somente leitura, Partial e Pick são homomórficos, enquanto Record não. Uma pista de que Record não é homomórfico é que não é necessário um tipo de entrada para copiar propriedades de:
type ThreeStringProps = Record<'prop1' | 'prop2' | 'prop3', string>
E é isso. Além das citações acima, não há outra menção Record
no typescriptlang.org .
Questões
Alguém pode dar uma definição simples do que
Record
é?É
Record<K,T>
apenas uma maneira de dizer "todas as propriedades desse objeto terão tipoT
"? Provavelmente nem todas as propriedades, poisK
tem algum objetivo ...Os
K
genéricos proíbem chaves adicionais no objeto que não sãoK
ou permitem ou apenas indicam que suas propriedades não são transformadasT
?Com o exemplo dado:
type ThreeStringProps = Record<'prop1' | 'prop2' | 'prop3', string>
É exatamente o mesmo que isso ?:
type ThreeStringProps = {prop1: string, prop2: string, prop3: string}