node.js - 如何使 typescript 与 promise 一起工作?

标签 node.js mongoose typescript promise bluebird

因此,我在 node/express/mongoose 应用程序上使用 typescript,并且尝试对代码进行类型检查而不出现错误。

我定义了这个 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);

这个 Controller :

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)
      };
    }
  });
}

问题是,由于某种原因, typescript 将我的“getCityById”函数解析为返回 Promise<{}>而不是Promise<City>正如它应该的那样。

失败的尝试:

  • 我尝试将返回对象包装在 Promise.resolve
  • 我尝试使用new Promise并依赖 mongoose 的回调 API,而不是 Promise API

最佳答案

typescript resolves my 'getCityById' function as returning a Promise<{}> rather than a Promise as it should.

这是因为有多个返回路径。

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)
      };
    }

关于node.js - 如何使 typescript 与 promise 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36993170/

相关文章:

node.js - 使用变量获取 JSON 值时出现未定义

javascript - 服务器端和客户端 JavaScript

javascript - 更新 Mongoose 中的依赖日期字段

typescript - 如何在 TypeScript 中定义不透明类型?

node.js - 使用 webpack 构建 (React) 同构 web 应用程序的服务器部分,包括 CSS 样式加载器

javascript - 通过 JSON.stringify() 将数组传递到服务器并得到奇怪的结果

javascript - nodejs mongodb,从数据库没有得到结果

node.js - 使用 Mongoose 和 Node.Js 防止重复条目

html - 重用具有不同输入的 Angular 组件

javascript - typescript 类型错误: Cannot read property 'collection' of undefined