【发布时间】:2021-03-27 16:55:16
【问题描述】:
所以我有这个函数,它调用 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 必须有一个值(类似于 fs.readFile 等 NodeJS 函数)。
如何在 TypeScript 中表达这一点?
我确实检查了fs.readFile 的类型,它的类型与我的函数一样,结果参数data 是Buffer,不是可选的,也不为空。但由于他们的实现是用纯 JS 实现的,我猜他们不会遇到我遇到的 TypeScript 错误(?)
【问题讨论】:
-
请分享可重现的例子
标签: node.js typescript callback