首页 > 解决方案 > 如果属性具有特定值,则将条件属性添加到打字稿界面

问题描述

如果另一个属性具有特定值,我如何向接口添加其他属性?例如:

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。我发现的唯一解决方法是将 column 转换为ISpecialColumn,但理想情况下,类型会自动正确推断。

标签: typescript

解决方案


你需要一个类型保护

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

const column = columns.find(isSpecialClumn) // ISpecialColumn | undefined

推荐阅读