gpt4 book ai didi

typescript - 为什么 () => Promise 可以赋值给 () => void?

转载 作者:行者123 更新时间:2023-12-03 23:07:27 26 4
gpt4 key购买 nike

为什么这不会导致编译器错误?

function foo(): () => void {
return () => Promise.resolve();
}

这种特殊情况很重要,因为当一个函数返回一个 promise 时,调用者应该知道该函数在 promise 解决或拒绝之前不会“完成”。

promise 与我正在查看的代码库中为什么会出现问题有关,但似乎是 void 的组合和函数类型一般会得到我不理解的特殊待遇。为什么下面的第一行会出错,而第二行不会?
const y: void = 3;             // error
const x: () => void = () => 3; // OK

我误解了这个现象吗?这是 typescript 错误吗?

最佳答案

一个简单的理由:如果你使用 () => void作为回调类型,则意味着您不会期望返回值。

您只想执行一个不带参数的函数。

因此,由于您通常也可以调用返回某些内容的函数,然后忽略返回值,因此可以使用任何返回某些内容的函数来代替标记为返回 void 的函数。 .

从其他语言的角度来看,返回的类型对编译很重要,这可能会令人惊讶。但是,考虑到 TypeScript Root 于 JavaScript,并且有一个返回“无”( function f() { return; } )的函数实际上返回了 undefined反正。所以从这个角度来看,所有 JS 函数都会以某种方式返回一些东西。

这里是直接来自TypeScript FAQ的类似解释:

Another way to think of this is that a void-returning callback type says "I'm not going to look at your return value, if one exists".



所以, void在这里表示“对返回类型没有限制”。

如果你想禁止任何返回的类型,那么使用 () => undefined ,这是无论如何都会返回的最小类型,即使是 void功能。

关于typescript - 为什么 () => Promise<undefined> 可以赋值给 () => void?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61504888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com