typescript - react-admin dataProvider 类型扩展
问题描述
我正在为 react-admin 实现自定义 dataProvider。因为我们有许多数据类型,所以我想为不同的文件提供单独的资源提供程序。
但是,我在 transactionProvider 实现上遇到打字稿错误。
Type '(params: GetListParams) => Promise<{ data: Transaction[]; total: number; }>' is not assignable to type '<RecordType extends Record = Record>(params: GetListParams) => Promise<GetListResult<RecordType>>'.
Type 'Promise<{ data: Transaction[]; total: number; }>' is not assignable to type 'Promise<GetListResult<RecordType>>'.
Type '{ data: Transaction[]; total: number; }' is not assignable to type 'GetListResult<RecordType>'.
Types of property 'data' are incompatible.
Type 'Transaction[]' is not assignable to type 'RecordType[]'.
Type 'Transaction' is not assignable to type 'RecordType'.
'Transaction' is assignable to the constraint of type 'RecordType', but 'RecordType' could be instantiated with a different subtype of constraint 'Record'.
这是dataProvider.ts
import { ResouceProvider } from './resourceProvider';
import transactionProvider from './transactionProvider';
const providers: { [key: string]: ResouceProvider } = {
transactions: transactionProvider,
};
const dataProvider: DataProvider = {
getList: (resource: string, params: GetListParams) => {
return providers[resource].getList(params);
},
...
};
export default dataProvider;
资源提供者接口
export type ResouceProvider = {
getList: <RecordType extends Record = Record>(
params: GetListParams
) => Promise<GetListResult<RecordType>>;
...
};
TransactionProvider 实现
import { Transaction } from 'types';
import { ResouceProvider } from './resourceProvider';
const transactionProvider: ResouceProvider = {
getList: async (params: GetListParams) => {
const { start, end } = params.filter;
const res = await fetchTransactions(start, end);
const result = [];
for (let item of res.data.data) {
const transaction: Transaction = item.data;
transaction.id = item.id;
result.push(transaction);
}
return { data: result, total: result.length };
},
...
};
export default transactionProvider;
解决方案
在 Github 上发布问题 https://github.com/marmelab/react-admin/issues/6739
我已经更新ResourceProvider
为现在返回任何类型
export type ResouceProvider = {
getList: (params: GetListParams) => Promise<GetListResult<any>>;
推荐阅读
- c++ - 如何在 cmake >= 2.6 中使用没有 gnu 扩展的 c++98?
- wcf - WCF 客户端作为控制台应用程序运行,但作为 Windows 服务运行,失败并出现 EndpointNotFoundException
- php - 使用特定查询从 JSON 创建 PHP 数组
- jquery - 我如何使用 JQuery 从没有名称的数组 Json 中获取元素
- python - python中的口袋妖怪游戏:类/对象,战斗和深度复制
- excel - 如何在 laravel excel 中传递参数?
- ios - coca pod 图表未出现 (Swift4)
- html - 与 HTML5 相关的 CSS 中的点有什么作用?
- javascript - D3 Canvas 强制布局 - 脱节的组排斥另一组
- reactjs - 在反应虚拟化中异步加载组件?