Как определить смешанный массив в IO-TS? - PullRequest
0 голосов
/ 01 мая 2020

Используя последние https://github.com/gcanti/io-ts/, я хотел бы смоделировать свойство result из NodeLsStatusResponse, чтобы оно содержало объекты типа NodeStatus или NodeStatus404 in (t.readonlyArray)

Как определить это отношение io-ts?

export const Connection = t.union([t.literal('a'), t.literal('b')])
export type Connection = t.TypeOf<typeof Connection>

export const NodeStatus = t.type({
  connection: Connection,
  nodeId: t.string,
})

export const NodeStatus404 = t.type({
  connection: Connection,  
  host: t.string,
})

export type NodeStatus = t.TypeOf<typeof NodeStatus>
export type NodeStatus404 = t.TypeOf<typeof NodeStatus404>

export const NodeLsStatusResponse = t.type({
  code: t.literal('OK'),
  result: t.readonlyArray(NodeStatus), /// <<< I would like to have a mixed array here
})

1 Ответ

1 голос
/ 02 мая 2020

Я смог решить эту проблему, используя объединение для массива только для чтения:

export const NodeLsStatusResponse = t.type({
  code: t.literal('OK'),
  result: t.readonlyArray(t.union([NodeStatus, NodeStatus404])),
})
...