Node.js/Mongoose/MongoDb Typescript MapReduce - emit() 和 Array.sum() 方法
Posted
技术标签:
【中文标题】Node.js/Mongoose/MongoDb Typescript MapReduce - emit() 和 Array.sum() 方法【英文标题】:Node.js/Mongoose/MongoDb Typescript MapReduce - emit() and Array.sum() methods 【发布时间】:2017-02-21 07:54:23 【问题描述】:我正在尝试一个使用 MEAN 堆栈和 Typescript 的小项目,但我似乎遇到了一个问题,即 Typescript 无法识别 emit()
和 Array.sum()
方法的类型。
下面是我的代码...
let options: mongoose.ModelMapReduceOption<IInvoice, any, any> =
map: () =>
emit(this.customer, this.total);
,
reduce: (key, values) =>
return Array.sum(values);
,
out: replace: "map_reduce_customers" ,
verbose: true
;
我在 NPM 上使用 typings 包,并在我的项目中安装了 mongodb 和 mongoose 包的类型。这两种方法下都有红色的波浪线,但是当我运行时,应用程序工作得很好。
是的,它被正确地转换为有效的 javascript。我只是想知道 Typescript 是否缺少输入定义来使用这两种方法?
【问题讨论】:
【参考方案1】:你可以像这样声明发射函数
declare function emit(k, v);
然后使用非箭头函数(以便能够在 map 函数中使用“this”)
map: function map()
emit(this.customer, this.total);
Array.sum
据我所知在 JS 中不存在。如果它是由库提供的,您可能需要为该库安装类型。
【讨论】:
【参考方案2】:我只是想知道我是否缺少输入定义 让 Typescript 掌握这两种方法?
是的,有。您必须添加脚本引用。将以下内容添加到文件顶部(只需将其修复到项目中的正确路径即可):
///<reference path="../typings/modules/mongodb/index.d.ts" />
///<reference path="../typings/modules/mongoose/index.d.ts" />
【讨论】:
以上是关于Node.js/Mongoose/MongoDb Typescript MapReduce - emit() 和 Array.sum() 方法的主要内容,如果未能解决你的问题,请参考以下文章