Mongoose返回文档时出现TypeScript类型不匹配错误求助
解决Mongoose文档返回的TypeScript类型错误
错误根源
Mongoose的Model.find()方法会返回匹配条件的文档数组(类型为(IPersonDocument & { _id: ObjectId; })[]),但你定义的findByName函数声明返回单个IPersonDocument,二者类型不兼容,因此触发ts(2740)错误。
解决方案
根据业务需求选择以下两种修改方式:
方式1:返回匹配的第一个文档
如果只需要获取第一个匹配的用户,将find替换为findOne,同时更新函数返回类型为Promise<IPersonDocument | null>(需考虑无匹配项的情况):
// repo.ts 修改后 export async function findByName(name: string): Promise<IPersonDocument | null>{ return await PersonsModel.findOne({ firstName: name }) }
注意:参数类型
String改为string(TypeScript中优先使用小写的基本类型,而非大写的构造函数类型)
方式2:返回所有匹配的文档
如果需要获取所有匹配的用户,修改函数返回类型为文档数组:
// repo.ts 修改后 export async function findByName(name: string): Promise<IPersonDocument[]>{ return await PersonsModel.find({ firstName: name }) }
额外说明
IPersonDocument继承了Mongoose.Document,自带_id等Mongoose文档属性,TypeScript会严格校验返回值结构,必须保证函数返回类型与实际返回值类型一致。- 使用
findOne时,需处理返回值为null的情况,避免后续代码出现空值访问错误。
内容的提问来源于stack exchange,提问作者YSH
相关产品推荐
相关产品推荐

