O que Record<K, T>significa no texto datilografado?
O TypeScript 2.1 introduziu o Recordtipo, 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 Recordsob os Tipos mapeadas em direção ao lado Readonly, Partiale 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 Recordno 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, poisKtem algum objetivo ...Os
Kgenéricos proíbem chaves adicionais no objeto que não sãoKou 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}