TypeScript类型错误:HydratedDocument<T>|null无法赋值给T的问题及原因
问题:TypeScript类型不匹配错误原因分析
代码片段
async delete(id: string): Promise<T> { try { const response = await this._model.findByIdAndDelete(id); return response; } catch (error) { throw new Error("Method not implemented."); } };
错误信息
类型 'HydratedDocument<T, {}, {}> | null' 无法分配给类型 'T'。
'T' 可以被实例化为任意类型,该类型可能与 'HydratedDocument<T, {}, {}> | null' 无关。
错误原因
- 返回值类型不匹配:Mongoose的
findByIdAndDelete方法返回的是HydratedDocument<T> | null——找到匹配ID的文档时,返回的是Mongoose包装后的hydrated文档实例(带专属方法和属性);如果没有找到对应文档,则返回null。但你的方法声明返回Promise<T>,直接返回response必然出现类型不兼容。 - 泛型缺乏约束:当前泛型
T没有设置任何约束条件,TypeScript无法确认T和HydratedDocument<T>之间的关联关系,因此会提示T可能被实例化为任意类型,和方法实际返回的类型完全不相关。
内容的提问来源于stack exchange,提问作者dmx
相关产品推荐
相关产品推荐

