使用 typescript 在 react-admin v3 中扩展数据提供者

Extending data providers in react-admin v3 with typescript

react-admin 的 documentation 解释了如何使用自己的功能扩展现有的数据提供者。 据我所知,代码指的是 Javascript 中的(旧)实现,而大部分代码已迁移到 Typescript。

我的目标是覆盖 ra-data-simple-rest provider to only transfer fields that have actually changed (The issue 的更新方法,说明默认情况下对象的所有字段都被传输。要更改此行为,必须修改更新方法)。

这是文档中对应的部分代码(没有改动):

import dataProvider from 'ra-data-simple-rest';

const myDataProvider = {
    ...dataProvider,
    update: (resource, params) => {
        if (resource !== 'posts' || !params.data.pictures) {
            // fallback to the default implementation
            return dataProvider.update(resource, params);
        }
    //... and so on

这会导致以下错误:

   Property 'update' does not exist on type '(apiUrl: any, httpClient?: ((url: any, options?: Options | undefined) => Promise<{ status: number; headers: Headers; body: string; json: any; }>) | undefined) => DataProvider'.  TS2339

   6 |         if (resource !== 'posts' || !params.data.pictures) {
   7 |             // fallback to the default implementation
>  8 |             return dataProvider.update(resource, params);
     |                                 ^
   9 |         }
  10 |         /**
  11 |          * For posts update only, convert uploaded image in base 64 and attach it to

另一个问题:如果上述部分有效,那么 dataProvider 从哪里获得所需的参数 "apiUrl" 和 "httpClient"?

更新: 我还在 github 上将此问题报告为 issue

文档不完整。开发人员发布了修复程序。

如更新文档中所述,您必须按如下方式更改代码:

-import dataProvider from 'ra-data-simple-rest';
+import simpleRestProvider from 'ra-data-simple-rest';
+const dataProvider = simpleRestProvider('http://path.to.my.api/');

注意:如果解决了您的问题,请将问题标记为已解决。