gpt4 book ai didi

typescript - 如何解决 PouchDB 的错误(?)TypeScript/DefinitelyTyped 类型?

转载 作者:行者123 更新时间:2023-12-02 03:55:24 24 4
gpt4 key购买 nike

我正在寻求有关 TypeScript 和 PouchDB type declarations 的帮助。考虑这个 TS 代码:

import PouchDB = require('pouchdb')
import find = require('pouchdb-find')
PouchDB.plugin(find)

const data = new PouchDB("http://localhost:5984/data"),

export async function deleteLastRevForIds(dbname, ids) {
const docsToDelete = await data.find({
fields: ["_id", "_rev"],
selector: { _id: { $in: ids } }
})

const deletePromise = docsToDelete.docs.map(doc => {
return data.remove(doc) // <-- HERE TSC SHOUTS AT ME about `doc`
})
const deletion = await Promise.all(deletePromise)
return deletion
}

在带注释的 remove() 调用中,tsc 发出此错误:

Argument of type 'IdMeta' is not assignable to parameter of type 'RemoveDocument'.
Type 'IdMeta' is not assignable to type 'RevisionIdMeta'.
Property '_rev' is missing in type 'IdMeta'.'

发生的事情是 find() 调用是 typed by the DefinitelyTyped typings返回一个 {docs: PouchDB.Core.IdMeta[]}。顾名思义,一个PouchDB.Core.IdMeta[]表示 {_id: string} 数组。

但这是假的! PouchDB.find() 不仅仅返回 {_id: ...} 对象的列表,它返回一个 {_id: ..., _rev: ...} 列表(另外我明确要求提供这两个字段)。或者我错过了什么?

因此,当调用 remove() 函数时(DT 类型正确地键入为需要一个完全指定的 _id+_rev RevisionIdMeta) 和这样的对象,TS 正确地对我大喊大叫。

我尝试向各个方向转换这个东西,但无法将其弯曲到我的意愿; tsc 不断出错,指出我的对象中缺少 _rev

  • 我有办法进行如此“深度”的 Actor 吗?
  • 如果没有,是否有办法尽可能在本地覆盖 DT 类型?
  • 我应该完全做点别的事情吗?

另外,我应该建议更改 DT 类型吗?

谢谢。

最佳答案

是的,Pouchdb-find 定义是错误的。像这样的事情应该会让你感动......

const data = new PouchDB("http://localhost:5984/data")

interface FixedFindResponse<Content extends PouchDB.Core.Encodable> {
docs: PouchDB.Core.ExistingDocument<Content>[];
}
export async function deleteLastRevForIds(dbname: void, ids: number[]) {
const docsToDelete: FixedFindResponse<any> = await data.find({
fields: ["_id", "_rev"],
selector: { _id: { $in: ids } }
})

const deletePromise = docsToDelete.docs.map(doc => {
return data.remove(doc) // <-- HERE TSC SHOUTS AT ME about `doc`
})
const deletion = await Promise.all(deletePromise)
return deletion
}

关于typescript - 如何解决 PouchDB 的错误(?)TypeScript/DefinitelyTyped 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44139701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com