Задать вопрос

В чем принципиальная разница между сигнатурой индекса и утилитой Record?

Независимо от того, что использовать (и с чем) - всё работает отлично. Используем ли мы 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>
  • Вопрос задан
  • 81 просмотр
Подписаться 1 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
Zhuroff
@Zhuroff Автор вопроса
Пока удалось найти, что посредством сигнатуры можно запилить циклический тип. А Record этого не позволяет. На практике подобное вроде пока не пригождалось, но мало ли.
type SomeType1 = { [index: string]: SomeType1 | null }
type SomeType2 = Record<string, SomeType2 | null> // Type alias 'SomeType2' circularly references itself.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы