Как добавить свойство в type?

#typescript

#typescript

Вопрос:

Я должен работать с кодом, который представляет повторяющуюся ситуацию, подобную следующему примеру:

 const orders: Order[] = await this.getOrders()

const parsedOrders = orders.map(order => {
  // @ts-ignore --> how to remove this line without getting errors
  order.linesLength = order.lines.length
  return order
})
  

Я хотел бы удалить указанный комментарий и позволить TypeScript выполнять свою работу без ошибок. Но я не уверен, какую технику реализовать в этих ситуациях, когда у меня есть тип, к которому мне нужно добавить какое-то свойство, которого в нем нет.

Комментарии:

1. parsedOrders не определено, forEach ничего не возвращает; почему бы не использовать orders.map вместо orders изменения?

2. @jonrsharpe моя ошибка! Я редактирую свой пост. В любом случае, orders.map вызовите такое же поведение

3. Почему бы вам не создать новый объект вместо изменения старого?

Ответ №1:

Вы можете создать интерфейс, который расширяется Order с помощью дополнительных свойств:

 interface ParsedOrder extends Order {
  linesLength: number
}

const parsedOrders: ParsedOrder[] = orders.map((order) => {
  return {
    ...order,
    linesLength: order.lines.length
  }
})