gpt4 book ai didi

typescript - “void”返回类型未在 TypeScript 中检查——防止 float promise ?

转载 作者:行者123 更新时间:2023-12-05 03:50:34 26 4
gpt4 key购买 nike

在 TypeScript 3.9.7 中运行,这与编译器无关:

const someFn: () => void = () => 123;

我发现了 this answer ,这说明这是设计使然。我有点明白它背后的原因(基本上,当将函数作为参数传递时,您应该能够忽略返回类型)。

但是当看到 promises 时,情况就不同了:

const someFn: () => void = () =>
new Promise((resolve, reject) => reject(Error('onoez')));
someFn();

我正在使用 eslint@typescript-eslint/no-floating-promises 规则检查我的代码,以避免未处理的 promise 拒绝。在上面的脚本中,因为 linter 认为 someFn 没有返回任何东西,所以它不会警告我。

这是我必须忍受的吗?如果一个函数接受一个 () => void 类型的回调,并且我向它传递一个异步函数,编译器不会警告我,坏事就会开始发生。我能以某种方式避免这种情况吗?

最佳答案

void 的返回类型意味着 typescript 不会让您使用返回值,无论它是什么。但是正如您所注意到的,这并不能阻止返回某些东西。您不会改变这种行为。

() => void 表示你不关心返回值是什么,因为你不打算使用它。但是,在这种情况下,您确实很在意。

因此,您可以通过使用未定义的返回类型来声明一个函数类型,强制它不返回任何值。 p>

const someFn: () => undefined = () =>
// Type 'Promise<unknown>' is not assignable to type 'undefined'.
new Promise((resolve, reject) => reject(Error('onoez')));

关于typescript - “void”返回类型未在 TypeScript 中检查——防止 float promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63400854/

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