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
如果名称为 ,我想IBaseColumn
拥有其他属性SpecialColumn
。上面的示例有效,但由于columns
类型为IColumn[]
,因此我查找的列也是.find
。我发现的唯一解决方法是将 column 转换为ISpecialColumn
,但理想情况下,类型会自动正确推断。
解决方案
你需要一个类型保护:
const isSpecialClumn = (column: IColumn): column is ISpecialColumn =>
column.name === 'SpecialColumn'
const column = columns.find(isSpecialClumn) // ISpecialColumn | undefined
推荐阅读
- wpf - Automating ScaleTransform for Rectangles in bar chart
- jquery - 如何在 JQuery Autocomplete 小部件中正确使用源代码
- configuration - 将 RapidClipse X 部署到桌面应用程序
- xamarin.forms - Xamarin 表单检查对元素的可访问性焦点
- c# - 从 userControl 调用 Main 函数
- cordova - FAILURE:构建失败并出现异常。'VM 初始化期间发生错误' ionic
- typescript - 无论我尝试什么,npm 都不会忽略我的 TypeScript 源代码文件
- c# - 用于检查重复项(不同对象、不同字段)的通用 C# 函数
- c# - CS0103:在编辑现有的工作代码文件时,名称在当前上下文中不存在
- javascript - React 路由器更改 URL 但不更改视图