如何提取 typescript mongoose/typegoose 模式
Posted
技术标签:
【中文标题】如何提取 typescript mongoose/typegoose 模式【英文标题】:How to extract typescript mongoose/typegoose schema 【发布时间】:2020-05-29 22:15:29 【问题描述】:这里是一个声明的模式
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 函数,只包含普通字段?
【问题讨论】:
【参考方案1】:当你使用 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
的返回类型,否则返回类型将是一个模型(它不是在运行时)
【讨论】:
以上是关于如何提取 typescript mongoose/typegoose 模式的主要内容,如果未能解决你的问题,请参考以下文章
mongoose 和 typescript 如何自动将 '_id' 转换为 'id'?
如何在 NestJs 和 typescript 中使用 `mongoose-delete` 插件?
使用 TypeScript 时如何避免两次编写 Mongoose 的 Schema?
如何在 typescript 中使用 mongoose 在 mongodb 中插入数据?