微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TypeScript:正确指定回调错误,res 类型

如何解决TypeScript:正确指定回调错误,res 类型

所以我有这个函数,它要么调用 cb 出错,要么返回结果。 TypeScript 不喜欢 cb(err,null)

function foo(cb: (err: Error | null,result: MyType)) {
   try {
     const result = getResultSomehow();
     cb(null,result);
   } catch(err) {
     cb(err,null) // Argument of type 'null' is not assignable to parameter of type MyType
}

在这是有道理的,我可以通过改变函数的签名来修复它:function foo(cb: (err: Error | null,result: MyType | null)) 但我不想要那样,因为现在这函数调用者突然必须检查结果是否不为空。但我希望他们只检查 err,如果 err 为 null,则 result 必须有一个值(类似于 NodeJS 函数,例如 fs.readFile)。

如何在 TypeScript 中表达这一点?

我确实检查了 fs.readFile 的类型,它的类型与我的函数一样,结果参数 data一个 Buffer,不是可选的,也不是 null。但是由于他们的实现是纯 JS,我想他们不会遇到我遇到的 TypeScript 错误(?)

解决方法

有趣的问题 - 问题是您不能强迫 foo 的调用者不访问 result 并阻止他/她认为 result 是在错误,除非您执行 result: MyType | null。也许他/她认为即使出现错误,foo 仍可能返回结果。

话虽如此,我明白你的意思,你可以通过执行以下操作来解决这个问题:

function foo(cb: (err: Error | null,result: MyType) => void) {
   try {
     const result = getResultSomehow();
     cb(null,result);
   } catch(err) {
     cb(err,null as any);
   }
}

但是,您应该记录这一点,以便调用者知道发生错误时 result 将始终为 null

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。