добавить условные свойства в интерфейс машинописного текста, если свойство имеет определенное значение - PullRequest
2 голосов
/ 05 августа 2020

Как я могу добавить дополнительные свойства к интерфейсу, если другое свойство имеет определенное значение? Например:

interface IBaseColumn {
  name: string
  display?: boolean
}

interface ISpecialColumn extends IBaseColumn {
  name: 'SpecialColumn'
  extraProp?: any
}

export type IColumn = IBaseColumn | ISpecialColumn

// ...
const columns: IColumn[] = [/* ... */]

const column = columns.find(c => c.name === 'SpecialColumn') // IColumn | undefined

Я хочу, чтобы IBaseColumn имел дополнительные свойства, если имя SpecialColumn. Приведенный выше пример работает, но поскольку columns имеет тип IColumn[], я ищу столбец с .find. Единственный обходной путь, который я нашел, - это привести столбец к ISpecialColumn, но в идеале тип будет правильно вводиться автоматически.

1 Ответ

2 голосов
/ 05 августа 2020

Вам понадобится охранник типа :

const isSpecialClumn = (column: IColumn): column is ISpecialColumn =>
  column.name === 'SpecialColumn'

const column = columns.find(isSpecialClumn) // ISpecialColumn | undefined
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...