@zorro3

Возможно ли описать объект, который может иметь любые ключи?

У меня есть тип например "Animal" и ключи к этому объекту могут приходить любые, но значение этих ключей всегда String.
Например на один ответ я получаю такой объект:
General: {
  name: "test",
  example:  {
      breed: "test",
      eyes: "test"
    }
}

На слудующий:
General: {
  name: "test",
  example:  {
      something: "test"
      somethingElse: "test"
      someOtherField: "test"
    }
}

Возможно ли как то описать этот объект?
type Animal {
  // how i can describe this object?
}

type General {
  name: String
  example: Animal
}
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347
Ткнуть в доку лучше готового к копипасте ответа
type Animal = {
  [key: string]: string;
};

Вообще синтаксис такой:
type Animal = {
  [<любое имя>: <тип ключей>]: <тип значений>;
};
Имя должно быть валидным идентификатором, зачем оно нужно TS - я хз, но без него не ест
тип ключей должен быть подтипом string | number | symbol, притом с symbol есть траблы, там только юнион из конкретных символов
тип значений - любой тип, но должен не пересекаться с типами явных полей
явные поля должны быть до универсального

А вообще в стандартной библиотеке есть утилити тип Record с двумя дженерик аргументами - тип ключей и тип значений, притом у него нет траблов с symbol:type Animal = Record<string, string>;
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы