[strapi]在 Typescript 中调用服务时,类型“{}”没有调用签名错误

2024-05-13 531 views
9
错误报告 所需的系统信息
  • Node.js 版本:18.16.0
  • NPM版本:
  • 斯特拉皮版本:4.11.1
  • 数据库:PostgreSQL
  • 操作系统:macOS
  • 你的项目是Javascript还是Typescript:Typescript
描述错误
Starting the compilation for TypeScript files in /Users/alexgao/Dev/asiagames-app/apps/asiagames-strapi
src/api/game/controllers/game.ts:13:59 - error TS2349: This expression is not callable.
  Type '{}' has no call signatures.

13     const result = await strapi.service('api::game.game').findByUUID(uuid, sanitizedQueryParams);
                                                             ~~~~~~~~~~

Found 1 error(s).
重现行为的步骤 预期行为

兼容打字稿

截图

如果适用,请添加屏幕截图以帮助解释您的问题。

代码片段

如果适用,请添加代码示例以帮助解释您的问题。

额外的背景信息

在此处添加有关该问题的任何其他上下文。

回答

8

更新后我得到同样的错误 error TS2349: This expression is not callable. Type '{}' has no call signatures.

图像

5

也经历过这样的事。

6

同样在这里。

8

我有完全相同的问题)

0

这不是一个很好的解决方案,但对于任何需要让其构建正常工作的人来说,您可以在 tsconfig 文件中排除 src 目录。

4

我可以暂时使用来解决。 const 结果 = 等待 Strapi.service('api::game.game').findByUUID(uuid, sanitizedQueryParams);

2

也拿这个...

8

通过为服务创建类型来解决

type ExampleService = {
  findSomething: (value:string) => Promise<YourResponseType>
}

const result = await strapi.service<ExampleService>('api::example.example').findSomething('hello')
8

同样在这里。从4.11.0更新到4.11.1时的体验。看起来像是最新版本的回归。

3

同样在这里...

3

同样的问题。 Strapi 的 TypeScript 系统总是有很多问题,它几乎是 AnyScript :D,但现在它使用起来有点困难......

4

我认为此错误与上次 Strapi 更新 (4.11.1) 中包含的新功能有关:

类型系统 v1:#16917

降级到 4.11.0 可以解决该问题。希望他们能在最新版本中修复这个问题。

8

看起来添加.entityService为我解决了这个问题。尝试:

const result = await strapi.entityService.service('api::game.game').findByUUID(uuid, sanitizedQueryParams);

查看文档

UPD 它仅适用于标准实体服务 API


const entry = await strapi.entityService.findOne('api::article.article', 1, {
  fields: ['title', 'description'],
  populate: { category: true },
});```
1

嗨@alxnkt!不幸的是,正如您所说,它仅适用于标准实体服务?我意识到这一点,因为它不适用于我从“strapigenerate”生成的基本 API 的服务。它仅适用于单一和集合类型的标准实体服务。

0

大家好,感谢您抽出时间来写这个问题。由于整个团队上周都在度假,所以我们的回复有点慢。我今天会看一下并让您知道(很可能它与 @eucciferri 共享的功能有关)

2

我已经提交了 PR 来解决这个问题。

对于给您带来的不便,我们深表歉意。我们对 TS 支持的未来改进感到兴奋,让这一点溜走,我们会尽力做得更好。