如果属性具有特定值,则向typescript接口添加条件属性



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

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,但理想情况下会自动正确推断类型。

您需要类型的防护:

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

最新更新