如何使承诺的打字稿工作?

所以,我在节点/ express / mongoose应用程序上使用打字稿,我试图让我的代码typecheck没有错误。

我定义这个mongoose模型:

import * as mongoose from 'mongoose'; const City = new mongoose.Schema({ name: String }); interface ICity extends mongoose.Document { name: string } export default mongoose.model<ICity>('City', City); 

和这个控制器:

 import * as Promise from 'bluebird'; import CityModel from '../models/city'; export type City = { name: string, id: string }; export function getCityById(id : string) : Promise<City>{ return CityModel.findById(id).lean().exec() .then((city) => { if (!city) { return Promise.reject('No Cities found with given ID'); } else { return { name: city.name, id: String(city._id) }; } }); } 

问题是,出于某种原因,打字稿解决了我的'getCityById'函数返回一个Promise<{}>而不是一个Promise<City>因为它应该。

失败的尝试:

  • 我试图在Promise.resolve包装返回对象
  • 我试图使用new Promise并依靠mongoose的callbackAPI,而不是他们的诺言API

  • 与geonear的mongoose聚合
  • mongoose:从现有的数据生成模式
  • 如何在一个数组mongoose中存储不同的子目录?
  • 如何在数组中search多个可能的匹配
  • Mongo / Mongoose:清理孤儿文献
  • 根据条件在mongoose,mongoDB填写
  • 如何使用mongoosedynamic连接多个mongodb数据库?
  • mongoose不保存正确的模式
  • 打字机解决我的'getCityById'函数返回一个Promise <{}>,而不是一个承诺,因为它应该。

    这是因为有多个返回path。

     if (!city) { return Promise.reject('No Cities found with given ID'); } else { return { name: city.name, id: String(city._id) }; } 

    具体Promise.reject是无types的。

    快速解决

    断言:

     if (!city) { return Promise.reject('No Cities found with given ID') as Promise<any>; } else { return { name: city.name, id: String(city._id) }; }