reactjs - 如何使 React 组件的 props 类型相互依赖并自动推断
问题描述
我有一个抽象的 React 组件(BaseTable),它获取一个 api 并将结果显示为表中的行:
interface BaseTableProps {
columns: Column<R>[];
fetchData: () => Promise<AjaxError | R>
}
const BaseTable: FC<BaseTableProps> = ({
columns,
fetchData,
}) => { return .... }
然后我用我想要显示的特定数据表来实现这个基表。
例如,如果我想显示待办事项列表,我会这样做:
// the JSON type that is being returned from the API
interface TodoJSON {
firstColumn: string;
secondColumn: string;
}
const fetchTodosAPI: Promise<AjaxError | TodoJSON> = fetchAxios('/todos');
const columns: Column<TodoJSON>[] = [{ key: 'firstColumn' }, { key: 'secondColumn' }];
const TodosTable = () => {
return (
<BaseTable fetchData=(fetchTodosAPI) columns={columns} />
);
};
问题是我如何键入 BaseTable 的打字稿,以便我可以让 R 泛型等于我从 API 加载的数据,在这种情况下 - TodoJSON。
如果我能做到这一点,我将在 BaseTable 中拥有 Column 类型的列。
这样,所有 fetchData 和列都是相关的,并且我拥有从实现方面控制的安全类型。
如果我要更改 Todo 表中的 fetchData JSON 响应类型,列将自动被推断为新的 JSON 类型。
解决方案
推荐阅读
- javascript - 打开/关闭菜单问题;在移动设备和台式机/笔记本电脑上
- ruby - 在与正则表达式相同的命名空间中实例化一个类
- python - Python Pandas 日期时间自定义 BQuarterEnd
- python - Python pandas dataframe pivot 仅适用于 pivot_table() 但不适用于 set_index() 和 unstack()
- elasticsearch - 弹性嵌套查询返回与条款完全匹配
- jhipster - 为微服务响应式蓝图添加更多选择
- android - Buildozer 不是为 android 构建的
- reactjs - React 动态改变状态列表异步问题
- node.js - 错误:超出配额(DNS 解析:每天)
- python - 在 Julia 中:如何获取当前正在运行的程序的名称?