使用typeorm创建通用存储库

时间:2016-11-26 16:00:11

标签: node.js generics typescript typeorm

我正在使用typeorm,我想创建一个通用存储库:

import "reflect-metadata";
import { DBManager } from './db-manager';
import { Photo } from './entities/Photo';
import { createConnection, Connection } from "typeorm";

class GenericRepository<T> {
private connection: DBManager;
constructor(connection: DBManager) {
    this.connection = connection;
}

public list(): T[] {
    let result: T[] = [];
    this.connection.connect().then(async  connection => {
        result = await <Promise<T[]>>(connection.entityManager.find(T));
    });
    return result;
 }
}

let genericReposity = new GenericRepository<Photo>(new DBManager());
genericReposity.list();

这段代码并没有找到找不到名字的方法,而是抱怨T

T应该是我的实体,但我不知道如何实现这个

1 个答案:

答案 0 :(得分:2)

TypeScript中的泛型仅在编译类型中,并且在输出javascript代码中删除了有关您的泛型类型的所有信息。这就是为什么它不可能做你想要的。只有在为通用存储库明确指定类型时才有可能,例如通过构造函数:

onAuthStateChanged

另外请注意,每次请求实体列表时,您可能都不希望连接到数据库。所以我建议重新设计你的课程。