如何解决在TypeScript中未检查“无效”返回类型–防止浮动承诺吗?
在TypeScript 3.9.7中运行,这与编译器无关:
const someFn: () => void = () => 123;
我发现了this answer,这说明这是设计使然。我得到了一些背后的理由(基本上,在将函数作为参数传递时,您应该能够忽略返回类型)。
但是,关于诺言的故事却变得与众不同:
const someFn: () => void = () =>
new Promise((resolve,reject) => reject(Error('onoez')));
someFn();
我正在使用eslint
的{{1}}规则检查我的代码,以避免未处理的承诺被拒绝。在上面的脚本中,由于linter认为@typescript-eslint/no-floating-promises
不返回任何内容,因此不会警告我。
这是我必须忍受的东西吗?如果一个函数接受一个someFn
类型的回调,而我给它传递了一个异步函数,则编译器不会警告我,并且坏事将开始发生。我能以某种方式避免这种情况吗?
解决方法
返回类型void
意味着打字稿将不允许您使用返回值,无论它是什么。但是,正如您注意到的那样,这并不妨碍返回任何东西。您不会改变这种行为。
() => void
意味着您不在乎返回值是什么,因为您不打算使用它。但是,在这种情况下,您确实会在意。
因此,您可以声明一个函数类型,该函数类型使用返回类型undefined
来强制其不返回 any 值。
const someFn: () => undefined = () =>
// Type 'Promise<unknown>' is not assignable to type 'undefined'.
new Promise((resolve,reject) => reject(Error('onoez')));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。