Независимо от того, что использовать (и с чем) - всё работает отлично. Используем ли мы union или enum, или просто примитивный тип. Я знаю, что общепринятым является использование сигнатуры индекса для объектов с произвольным числом любых ключей, а Record - с ограниченным набором конкретных ключей, но если не принимать во внимание это джентельменское соглашение, есть ли какие-то действительно принципиальные отличия?
В примере ниже типы, созданные на основе сигнатур индексов и утилиты Record - идентичны
type UnionType = 'production' | 'development' | 'staging'
type OneMoreUnionType = 'take' | 'my' | 'money'
type SomeComplexType = { hello: string; world: string }
type MoreComplexType = Record<OneMoreUnionType, Omit<SomeComplexType, 'hello'>>
enum EnumType {
Prod = 'production',
Dev = 'development',
Stg = 'staging'
}
type IndexSignature = { [key: string]: string }
type IndexSignatureWithUnion = { [key in UnionType]: SomeComplexType }
type IndexSignatureWithEnum = { [key in EnumType | OneMoreUnionType]: MoreComplexType }
type RecordType = Record<string, string>
type RecordTypeWithUnion = Record<UnionType, SomeComplexType>
type RecordTypeWithEnum = Record<EnumType | OneMoreUnionType, MoreComplexType>