reactjs - 如何为两个接口设置依赖关系?
问题描述
有一个表格组件,它有一个带有行数据数组的参数。它用接口描述:
interface ITableProps {
columns: Array<IHeadCell>;
model: Array<IRowData>;
getRowId?: (row: IRowData) => string | number;
striped?: boolean;
useCheckbox?: boolean;
}
其中model
是一个行数组。下一个界面描述的单行:
interface IRowData {
[key: string]: any;
}
如何在下一个场景中对这两个接口进行类型检查:如果 table 属性useCheckbox
具有 true 值,则 interfaceIRowData
具有所需的属性selected
。如果表属性useCheckbox
具有错误值或未定义,则IRowData
不需要selected
属性。
解决方案
虽然您需要的东西是不可能的,但您可以使用联合类型和Omit实用程序类型来解决这个问题。
如果代替ITableProps
你有:
interface ITableProps {
columns: Array<IHeadCell>;
model: Array<IRowData>;
getRowId?: (row: IRowData) => string | number;
striped?: boolean;
useCheckbox?: false;
}
interface ICheckboxTableProps extends Omit<ITableProps, "useCheckbox"> {
model: Array<IRowData & { selected: boolean }>;
useCheckbox: true;
}
type TableProps = ICheckboxTableProps | ITableProps;
然后ICheckboxTableProps
扩展ITableProps
除了useCheckBox
属性,它被替换为true
.
因此,如果联合类型创建为TableProps
,它将使用:
- 接口
ITableProps
ifuseCheckbox
为 false 或未定义,并且 - 如果它是真的
ICheckboxTableProps
需要的接口。IRowData.selected
因此:
const table: TableProps = {
// ...
model: [],
useCheckbox: false
}
已验证。
也是
const checkedTable: TableProps = {
// ...
model: [{ selected: true }],
useCheckbox: true
}
但
const invalidTable: TableProps = {
model: [{ otherProp: "otherValue" }],
useCheckbox: true
}
不是。
推荐阅读
- angular - 将 @Output EventEmitter 动态添加到 Angular 组件
- python - 这组代码不断循环和循环。我可以知道如何停止循环吗?
- javascript - 如果我使用了 vm.$watch API,是否需要删除组件 destroy() 上的观察者?
- reactjs - 我在做什么错?,正在使用 npx create-react-app app_name 创建反应应用程序。但我不断收到不寻常的错误
- tableau-api - Tableau中如何根据行中的两个条件过滤数据
- python - Python defaultdict(default) vs dict.get(key, default)
- python - 根据可变时间条件将行拆分为多行
- curl - Libcurl 不会在 cookie.txt 中正确写入 cookie
- windows - 从 Windows 远程备份树莓派 sd 卡
- php - Drupal删除/删除内容中包含特定单词的所有页面