如何使承诺的打字稿工作?
所以,我在节点/ 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
打字机解决我的'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) }; }