这里是声明的模式
class AccountSchema;
这里是声明的模型
const AccountClass: Model<AccountSchema & Document>;
class Account extends AccountClass;
为什么不起作用?
type ExtractSchema<T extends Model<Document>> = T extends Model<infer D & Document> ? D : never;
class Service<T extends Model<ExtractSchema<T> & Document>> {
public async getSchema(): ExtractSchema<T>;
}
class AccountService extends Service<typeof Account> {
public test() {
[ERROR: this.getSchema() returns never]
this.getSchema()
}
}
使用泛型提取架构的最佳方法是什么?有什么方法不包括javascript getter和setter函数,仅包括纯字段?
答案 0 :(得分:0)
当您使用typegoose或mongoose时,以下方法应该起作用
class Service<T extends Model<ExtractSchema<T> & Document>> {
public async getSchema(): ExtractSchema<T> {
return this.schema;
}
}
this.schema
将在从文档中调用该函数时返回架构,否则您将需要设置static
一词以使其成为静态函数(从模型中调用)>
关于类型,您应该使用mongoose.Schema<typeof YourClass>
作为getSchema
的返回类型,否则返回类型将是一个模型(在运行时不是)