TypeScript Promise 语法

Posted

技术标签:

【中文标题】TypeScript Promise 语法【英文标题】:TypeScript Promise Syntax 【发布时间】:2019-10-07 22:08:28 【问题描述】:

我最近开始研究 TypeScript,并从文档中发现了 Starter Project。一切看起来都很简单,但有一小部分代码我无法理解。

这里是:

// Connect to MongoDB
const mongoUrl = MONGODB_URI;
(<any>mongoose).Promise = bluebird;
mongoose.connect(mongoUrl).then(
  () => ,
).catch(err => 
  console.log("MongoDB connection error. Please make sure MongoDB is running. " + err);
);

让我困惑的是这一行:

(<any>mongoose).Promise = bluebird;

&lt;any&gt;mongoose 语法让我想起了类型转换,但我不认为这是真正发生的事情,因为我们将 bluebird 模块分配给了 .Promise 部分。

因此,如果有人能够解决这个问题,我将非常感激。

【问题讨论】:

【参考方案1】:

&lt;any&gt;mongoose 确实是类型转换,尽管是旧语法。最新的形式是(mongoose as any).Promise = bluebird。这意味着您将引用mongoose并忽略其实际类型,并将其视为any

这可以防止与 mongoose 类型不匹配导致的编译时错误。

一般情况下,您不应该强制转换为any,并且您应该了解在这种情况下为什么需要您这样做,看看您是否可以避免它。

【讨论】:

.Promise = bluebird 部分呢?我知道bluebird 是一个promises 模块,但是这个赋值在这里意味着什么? 我的猜测是,将 bluebird 分配给 mongoose.Promise 将导致来自 mongoose 的 Promise 返回函数和方法返回 bluebird 的实例,而不是本机 Promise 的实例。但是您可以轻松查看文档来验证这一点。

以上是关于TypeScript Promise 语法的主要内容,如果未能解决你的问题,请参考以下文章

使用 Promise 的 TypeScript 异步类型保护

Promise.race 的返回类型应该是啥? (打字稿)

TypeScript语法错误:Argument of type ‘string‘ is not assignable to parameter of type ‘Element‘. 解决方法

Typescript async/await 无法确定正确的返回类型

TypeScript 这个语法“-?”是啥意思? (破折号问题)是啥意思?

Typescript:Promise 的子类/扩展:不引用 Promise 兼容的构造函数值