【问题标题】:add conditional properties to typescript interface if property has a certain value如果属性具有特定值,则将条件属性添加到打字稿界面
【发布时间】:2020-08-05 19:21:38
【问题描述】:

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

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

如果名称为 SpecialColumn,我希望 IBaseColumn 具有其他属性。上面的示例有效,但由于columns 的类型为IColumn[],所以我使用.find 查找的列也是如此。我发现的唯一解决方法是将列转换为ISpecialColumn,但理想情况下,类型会自动正确推断。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    你需要一个类型保护

    const isSpecialClumn = (column: IColumn): column is ISpecialColumn =>
      column.name === 'SpecialColumn'
    
    const column = columns.find(isSpecialClumn) // ISpecialColumn | undefined
    

    【讨论】:

      猜你喜欢
      • 2023-01-16
      • 1970-01-01
      • 2018-06-13
      • 2019-08-19
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      相关资源
      最近更新 更多