所以,我在node / express / mongoose应用程序上使用typescript,我试图让我的代码类型检查没有错误。
我定义了这个猫鼬模型:
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的回调API而不是其承诺API 答案 0 :(得分:1)
typescript将我的'getCityById'函数解析为返回Promise&lt; {}&gt;而不是应有的承诺。
这是因为多个返回路径。
if (!city) {
return Promise.reject('No Cities found with given ID');
} else {
return {
name: city.name,
id: String(city._id)
};
}
具体而言Promise.reject
是无类型的。
断言:
if (!city) {
return Promise.reject('No Cities found with given ID') as Promise<any>;
} else {
return {
name: city.name,
id: String(city._id)
};
}