这里是一个声明的模式
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函数,只包含普通字段?
发布于 2020-03-04 00:02:20
当您使用typegoose或mongoose时,应该可以执行以下操作
class Service<T extends Model<ExtractSchema<T> & Document>> {
public async getSchema(): ExtractSchema<T> {
return this.schema;
}
}当从文档调用函数时,this.schema将返回模式,否则您将需要设置static word,使其成为静态函数(从模型调用)
至于类型,您应该使用mongoose.Schema<typeof YourClass>作为getSchema的返回类型,否则返回类型将是一个模型(它在运行时不是)
https://stackoverflow.com/questions/60220808
复制相似问题