错误 TS2794:期望 1 个参数,但得到了 0 个。你是否忘记在类型参数中包含 'void' 来解决 Promise 的问题?

89

在我的项目中,我使用的是Typescript@4.0.3,它一直运行得很好。但现在我将其更新到最新版的Typescript@4.1.3后,出现了很多错误。我在文档中找不到任何信息,也没有任何想法如何解决这个问题。

这是我的代码:

dbPool.query(`DELETE FROM table WHERE Id='${Id}'`, () => resolve())

另一个是:

return new Promise((resolve, reject) => {
  this.redis.SET(addr, resp, () => resolve())
})

这两个都给我报错:

错误 TS2794:期望 1 个参数,但却得到了 0。您是否忘记在 Promise 的类型参数中包含 'void'?

有什么想法可以在 resolve() 中传递什么来解决此问题吗?


你为什么想要用 undefined 来解决你的 Promise?this.red.SET 没有结果吗? - Bergi
这是一段旧代码,我真的不知道里面发生了什么。我只是做了一个小改动,由于 TypeScript 版本冲突,现在无法进行编译。 - Naila Akbar
抱歉,这里打错了一个字,不是“red”,而是“redis”。 - Naila Akbar
1个回答

203

在您的情况下,resolve 的标准参数是 unknown,这意味着需要一个参数;

如果您不希望 resolve 接受任何参数,可以将 Promise 的泛型类型明确设置为 void

return new Promise<void>((resolve, reject) => {
  this.red.SET(addr, resp, () => resolve())
})

5
Promise<undefined> 和 Promise<void> 有什么区别?哪个更好?Promise<undefined> 表示 Promise 将会返回一个值为 undefined 的结果,而 Promise<void> 表示 Promise 将不返回任何值。在大多数情况下,这两种类型的 Promise 都可以工作。如果您需要强调函数将返回 undefined 值,则使用 Promise<undefined> 更合适。但是,如果您希望明确表示函数不返回任何东西,则使用 Promise<void> 更清晰。 - Naila Akbar
12
@NullPointer undefined仍然是一个值,因此需要参数。void表示完全没有任何东西。 - user13258211
4
请不要通过破坏你的帖子给别人增添更多的工作。在 Stack Exchange(SE)网络上发布,即表示你已授予非撤销权利,在CC BY-SA许可证下,让SE分发该内容(即使你未来做出其他选择)。按照SE政策,将分发非破坏版本。因此,任何破坏都将被撤消。请参见:删除是如何运作的?...。如果允许删除,则在帖子左侧有一个“删除”按钮。 - Makyen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接