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 包,并在我的项目中安装了 mongodbmongoose 包的类型。这两种方法下都有红色的波浪线,但是当我运行时,应用程序工作得很好。

是的,它被正确地转换为有效的 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() 方法的主要内容,如果未能解决你的问题,请参考以下文章