Типизировать массив объектов, но у первого элемента уникальные свойства, а у остальных - однотипные

У меня имеется вопрос. Как написать тип в TypeScript для вот такого JSON объекта:

[
  {
    general: "yes!"
  },
  {foo1: "bar1", foo2: "bar2"},
  {foo1: "bar1", foo2: "bar2"},
  {foo1: "bar1", foo2: "bar2"}
]

то есть: имеется массив который состоит из объектов. но у первого объекта другие свойства, а вот у остальных объектов уже будут одинаковые свойства(то есть остальные объекты повторяются). можно ли как-то тип для этого написать что-бы тайпскрипт понимал?


Ответы (1 шт):

Автор решения: smellyshovel
type Obj = {foo1: string, foo2: string}[];

type Target = [{general: string}, ...Obj];

// Ваш тип
const data: Target = [
  {
    general: "yes!"
  },
  {foo1: "bar1", foo2: "bar2"},
  {foo1: "bar1", foo2: "bar2"},
  {foo1: "bar1", foo2: "bar2"}
]

// Не подходит
const data2: Target = [
  {foo1: "bar1", foo2: "bar2"},
  {foo1: "bar1", foo2: "bar2"},
  {foo1: "bar1", foo2: "bar2"}
]


// Не подходит
const data3: Target = [
  {
    general: "yes!"
  },
  {foo1: "bar1", foo2: "bar2"},
  {foo1: 2, foo2: "bar2"},
  {foo1: "bar1", foo2: "bar2"}
]

TS Playground

→ Ссылка