在使用TypeScript的返回数组的mongoose查询中使用`lean`

我有两个Mongoose查询,并决定最好在它们上使用.lean()

对于返回单个文档的那个,它似乎工作正常:

 let something:Something; SomethingDocument.findOne({_id:theId}).lean().then( (res) => { something = res;}); 

问题是当我尝试使用它返回多个结果的查询:

 let somethings:Something[]; SomethingDocument.find({color:'blue'}).lean().then( (res) => { somethings = res;}); 

第二个电话给出错误:

 Type 'Object' is not assignable to type 'Something[]'. The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead? Property 'length' is missing in type 'Object'. 

如果我尝试做一个types转换,它只是抱怨在'对象'types中缺less'length'属性。

当我期待一系列结果时,如何使用lean

…请注意,如果我简单地省略这一切的工作。

Mongoosetypes定义不是那么好恕我直言,所以你可以解决它使用这个:

 let somethings:Something[]; SomethingDocument.find({color:'blue'}).lean().then((res) => { somethings = res as any;}); 

顺便说一下,如果你能够(你必须将TS编译成现代的Ecma版本),我build议使用await

 const somethings = await SomethingDocument.find({color:'blue'}).lean() as Something[]; 

请注意,以前的版本捕获.catch上的错误,但第二个会引发exception。