小编use*_*362的帖子

基于第一个参数的函数参数动态类型

现在我有一个非常通用的功能,当我的客户端与我的服务器对话时,它就会命中。因此,为了保持灵活性,我这样做:

public call(method: string, ...parameters: any[]) {}
Run Code Online (Sandbox Code Playgroud)

不过,在我的服务器上,我将所有方法保存在一起,如下所示:

MethodManager.methods({
    findOne: {
        function: function(collection: string, query: Object) {
            return model(collection).findOne(query).exec();
        }
    },
    find: {
        function: function(collection: string, query: Object, sortQuery: Object = {}) {
            return model(collection).find(query).sort(sortQuery).exec();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,每个方法可能有不同的参数。当我在客户端编写代码时,我无法充分利用 Typescript 的潜力,因为它是“任意”类型的。

我怎样才能做到这一点,以便 Visual Studio 代码在我编写这行代码时能够识别:

this.socketManager.call('findOne', 
Run Code Online (Sandbox Code Playgroud)

它会弹出一个帮助列表,如下所示:

(method: 'findOne', collection: string, query: Object)
Run Code Online (Sandbox Code Playgroud)

但是当我输入:

this.socketManager.call('find',
Run Code Online (Sandbox Code Playgroud)

它给了我:

(method: 'find', collection: string, query: Object, sortQuery: Object = {})
Run Code Online (Sandbox Code Playgroud)

而不是无益的:

(method: string, ...parameters: any[])
Run Code Online (Sandbox Code Playgroud)

这可能吗?这对发展将是一个巨大的帮助。

function typescript visual-studio-code

5
推荐指数
1
解决办法
7304
查看次数

打字稿功能/对象参数

为什么打字稿 ES6 没有检测到对象不是函数?

find: (collection: string, query: object, sortQuery = {}, cb?: Function)  => {
    socketManager.call('find', collection, query, sortQuery, cb);
}
Run Code Online (Sandbox Code Playgroud)

基于这个函数,你会假设这会失败:

this._services._socket.methods.find('vendors', {type: 'repair'}, (errVen, resVen) => {}
Run Code Online (Sandbox Code Playgroud)

由于没有 sortQuery 对象,而是一个回调函数。这没有给我任何类型的错误,这意味着打字稿允许将回调作为对象类型。

我如何确保这会导致错误?

javascript typescript

5
推荐指数
2
解决办法
2万
查看次数

Mongo 多级聚合组

给出汇总后展开的以下数据:

let workOrders = [
    {customer: 'A', job: 'Apple', chemical: {name: 'Chem A', quantity: 500}},
    {customer: 'A', job: 'Banana', chemical: {name: 'Chem B', quantity: 400}},
    {customer: 'A', job: 'Banana', chemical: {name: 'Chem C', quantity: 300}},
    {customer: 'B', job: 'Cherry', chemical: {name: 'Chem A', quantity: 200}}
]
Run Code Online (Sandbox Code Playgroud)

所需输出:

[
  {
    customer: 'A',
    jobs: [
      {
        job: 'Apple',
        chemicals: [
          {name: 'Chem A', quantity: 500}
        ]
      },
      {
        job: 'Banana',
        chemicals: [
          {name: 'Chem B', quantity: 400},
          {name: 'Chem C', quantity: 300} …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

4
推荐指数
1
解决办法
2913
查看次数