在 TypeScript 3.9.7 中运行,这与编译器无关:
const someFn: () => void = () => 123;
我发现这个答案 https://stackoverflow.com/a/12763878/2072165,这说明这是设计使然。我在某种程度上理解了它背后的原因(基本上,在将函数作为参数传递时,您应该能够忽略返回类型)。
但从 Promise 来看,故事就变得不同了:
const someFn: () => void = () =>
new Promise((resolve, reject) => reject(Error('onoez')));
someFn();
我正在检查我的代码eslint
s @typescript-eslint/no-floating-promises
规则以避免未处理的承诺拒绝。在上面的脚本中,由于 linter 认为someFn
不返回任何内容,它不会警告我。
这是我必须忍受的事情吗?如果一个函数接受一个() => void
输入回调,并且我向它传递一个异步函数,编译器不会警告我,并且糟糕的事情将开始发生。我能以某种方式避免这种情况吗?
返回类型为void
意味着打字稿不会让你使用返回值,无论它是什么。但正如您所注意到的,这并不妨碍退回某些东西。你不会改变这种行为。
() => void
意味着你不关心返回值是什么,因为你不打算使用它。但是,在这种情况下,你确实关心。
So you can声明一个强制不返回的函数类型any使用返回类型的值undefined
.
const someFn: () => undefined = () =>
// Type 'Promise<unknown>' is not assignable to type 'undefined'.
new Promise((resolve, reject) => reject(Error('onoez')));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)