使用泛型声明 return 类型 class 方法的值

Use generics to declare type of return value of class method

我有以下内容:

export class RootCtrl {

  m: Model<any>;

  constructor(m: Model<any>) {
    this.m = m;
  }

  doFindMany(query: object, options?: CDTModelOpts, cb?: MongoErrorCB){

    const Model = this.m;

    // cb is optional, if cb == null, returns promise
    const {populate, lean} = options || ({} as CDTModelOpts);

    let q = Model.find(query);

    if (populate && populate.length > 0) {
      q = q.populate(populate);
    }

    if (lean !== false) {
      q = q.lean();
    }

    return q.lean().exec(cb)
  }

}

我想做的是为此包装器方法声明一个 return 类型...像这样:

  doFindMany(query: object, options?: CDTModelOpts, cb?: MongoErrorCB) : Array<typeof this.m> {

    const Model = this.m;

    // cb is optional, if cb == null, returns promise
    const {populate, lean} = options || ({} as CDTModelOpts);

    let q = Model.find(query);

    if (populate && populate.length > 0) {
      q = q.populate(populate);
    }

    if (lean !== false) {
      q = q.lean();
    }

    return q.lean().exec(cb)
  }

return 类型,是传入的模型值的类型。 然而,我使用的语法完全是伪造的。 return 类型是否可以将输入参数的类型反映给构造函数?

看来你需要像这里这样的东西。

  export class RootCtrl<ModelType> {

  m: Model<ModelType>;

  constructor(m: Model<ModelType>) {
    this.m = m;
  }

  doFindMany(query: object, options?: CDTModelOpts, cb?: MongoErrorCB): Array<Model<ModelType>>{

    const Model = this.m;

    // cb is optional, if cb == null, returns promise
    const {populate, lean} = options || ({} as CDTModelOpts);

    let q = Model.find(query);

    if (populate && populate.length > 0) {
      q = q.populate(populate);
    }

    if (lean !== false) {
      q = q.lean();
    }

    return q.lean().exec(cb)
  }

}