使用泛型声明 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)
}
}
我有以下内容:
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)
}
}