【发布时间】:2021-01-21 22:17:32
【问题描述】:
我有一个构造函数并调用静态方法来设置一个静态变量。
export abstract class AbstractRepository<T extends Typegoose> {
private static conn: SessionDb<T>; // <-- Compile error here!
protected model: Model<InstanceType<T>, {}>;
constructor(entity: T, collectionName: string){
if(AbstractRepository.conn == null) AbstractRepository.conn = SessionDb.connect(entity);
this.model = AbstractRepository.conn.getModel(collectionName);
}
}
如何键入conn: SessionDb <T> 属性?
这个变量是一个猫鼬连接。
保存单例变量以供将来访问是否有意义?
【问题讨论】:
-
你能不能试着把它变成一个minimal reproducible example,它可以放到像The TypeScript Playground这样的独立IDE中?或者也许提供一个指向 Web IDE 中的项目的链接,以显示您在做什么?在运行时只有一个
AbstractRepository而没有T,所以你的单例会被设置一次,然后再也不会。如果您希望将其设置为“每 XXX 一次”,您需要确定 XXX 是什么,并使实际具有支持它的范围的代码。也许你想要一个产生类的工厂函数?如果没有minimal reproducible example,真的不确定。 -
如果没有更多信息(特别是
SessionDb的定义),我真的无能为力,但正如@jcalz 所说,只有一个static conn变量适用于所有类型T,因此使该变量的类型依赖于T似乎是错误的。由于这是一个抽象类,您可能希望将conn设为抽象变量并强制您的具体实现它。但是,既然您问“保存一个单例变量以供将来访问是否有意义?”答案是如果conn依赖于T,那么它不会。只需将其设为实例变量即可。 -
优秀的答案!我同意我可以获得更多信息(包括使用 IDE),但我的想法是讨论如何以及是否有意义维护一个“类型化”静态变量,如果是,如何键入它。我相信最好的实现将是一个单例实例变量,正如@linda-paiste 所建议的那样。你能按照这个想法制定一个答案吗?
标签: angular mongodb typescript mongoose typescript-generics