Typescript 如何解决PockDB的不正确(?)类型脚本/定义类型打字?
我正在寻找有关TypeScript和的帮助。考虑这个TS代码:Typescript 如何解决PockDB的不正确(?)类型脚本/定义类型打字?,typescript,pouchdb,typescript-typings,definitelytyped,Typescript,Pouchdb,Typescript Typings,Definitelytyped,我正在寻找有关TypeScript和的帮助。考虑这个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
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
}
发生的情况是,find()
调用
返回一个{docs:pockdb.Core.IdMeta[]}
。顾名思义,
a表示{u id:string}
的数组
但这是假的backdb.find()
不只是返回{u id:…}
对象的列表,
它返回一个{u id:…,\u rev:…}
列表(加上我明确要求这两个字段)。还是我遗漏了什么
因此,在调用remove()
函数时(DT正确键入
对于这样一个对象,需要一个完全指定的_id+_revRevisionIdMeta
),TS对我大喊大叫
我试着把这东西向四面八方抛来抛去,但无法使它屈服于我的意志tsc
不断出错,表示我的对象中缺少\u rev
- 有没有办法让我做这样一个“深”的演员
- 如果没有,是否有办法尽可能在本地覆盖DT键入
- 我应该完全做别的事情吗
将某些内容作为任意内容进行重新转换。显然,如果不能获得正确的类型,这应该是最后的手段,因为断言没有任何安全性。例如,123作为任何窗口编译
有没有办法尽可能在本地覆盖DT键入
是的,看一看
我应该完全做别的事情吗
如果您确定类型定义是错误的,您可以随时对其进行修补,并向DefiniteTyped提交PR。是的,数据库查找定义是错误的。像这样的事情会让你动起来
const data=new-db(“http://localhost:5984/data")
接口FixedFindResponse{
docs:pockdb.Core.ExistingDocument[];
}
导出异步函数deleteLastRevForIds(dbname:void,ids:number[]){
const docsToDelete:FixedFindResponse=wait data.find({
字段:[“\u id”和“\u rev”],
选择器:{u id:{$in:ids}}
})
const deletePromise=docsToDelete.docs.map(doc=>{
返回数据。删除(单据)//
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'.'