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;
<any>mongoose
语法让我想起了类型转换,但我不认为这是真正发生的事情,因为我们将 bluebird
模块分配给了 .Promise
部分。
因此,如果有人能够解决这个问题,我将非常感激。
【问题讨论】:
【参考方案1】:<any>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 异步类型保护
TypeScript语法错误:Argument of type ‘string‘ is not assignable to parameter of type ‘Element‘. 解决方法
Typescript async/await 无法确定正确的返回类型