我正在使用pouchdb,它返回一系列可能混合成功的响应或批量操作错误。
成功的回应应该有一个字段
ok
设置为
true
在它中,错误响应可能有一堆可选字段。
我想从中筛选出所有的错误,但无法找到一个理智的守卫来缩小这个范围。
直接的方法是:
interface PouchResponse {
ok: boolean;
}
interface PouchError {
status?: number;
reason?: string;
}
function isError(
respOrError:
| PouchResponse
| PouchError)
: respOrError is PouchError {
return !respOrError.ok;
}
但那是突然发生的
好啊
不存在于
PouchResponse | PouchError
. 考虑到类型交集的工作方式,这是有意义的,但我在这里的目的是检查属性是否存在,以及
真
如果是这样的话。
我可以把签名改成:
function isError(respOrError: Partial<PouchResponse & PouchError>): respOrError is PouchError
但这感觉不太对劲,因为它并不能真正反映函数应该做什么:分离一个联合。不可能将任何其他随机对象传递到该函数中,并将该对象的范围缩小到
PouchError
只是因为它没有
好啊
财产。