Mongoose 的 loadClass() 和 TypeScript

Posted

技术标签:

【中文标题】Mongoose 的 loadClass() 和 TypeScript【英文标题】:Mongoose's loadClass() with TypeScript 【发布时间】:2019-07-10 10:31:36 【问题描述】:

Mongoose 接受 ES6 class 作为架构的基础。

该链接中的示例:

class PersonClass 

  get fullName() 
    return `$this.firstName $this.lastName`;    // compiler error
  



PersonSchema.loadClass(PersonClass);

类中没有定义模式的属性,所以 TypeScript 编译器说:

PersonClass 类型上不存在属性 firstName。

一个技巧是使用一个虚拟构造函数:

constructor(readonly firstName: string, readonly lastName: string)  

但这是 hack,更难维护。

有没有其他方法可以做到这一点,没有黑客?

【问题讨论】:

【参考方案1】:

诀窍是使用this IPerson注解:

get fullName(this IPerson) 
    return `$this.firstName $this.lastName`;

其中IPerson 是该架构的对应接口。

【讨论】:

使用我的 Typescript 3.4.5 版,我必须使用 this: IPerson 而不是 this IPerson

以上是关于Mongoose 的 loadClass() 和 TypeScript的主要内容,如果未能解决你的问题,请参考以下文章

ClassLoader.loadClass和Class.forName的区别

ClassLoader.loadClass和Class.forName的区别

Class.forName(),classloader.loadclass的区别

ClassLoader.loadClass和Class.forName的区别

ClassLoader.loadClass和Class.forName的区别

Class.forName和ClassLoader.loadClass的区别