Búsqueda de sitios web

node.js - creando un repositorio genérico con TypeORM


Es mi primer tema aquí y mi pregunta es por qué tengo un problema cuando intento crear un repositorio genérico en TypeORM, vamos al código:

import Car from "../entities/car";
import dataSource from "./../../config/dataSource";
import GenericRepository from "./genericRepository";
export default class CarRepository extends GenericRepository<Car>{
    constructor() {
        super(dataSource.getRepository(Car));
    }

    async findById(object: Car): Promise<Car | null> {
        return await this.repository.findOne({ where: [{ id: object.id }] });
    }

Esto es un findOne concreto que funciona normalmente, pero este es mi repositorio genérico

import { Repository } from "typeorm";
import IEntity from "../entities/IEntity";
import { IReposytory } from "./IRepository";

export default abstract class GenericRepository<T extends IEntity> implements IReposytory<T> {

    protected repository: Repository<T>

    constructor(repository: Repository<T>) {
        this.repository = repository;
    }

    async save(object: T) {
        await this.repository.save(object);
    }
    async update(object: T) {
        await this.repository.delete(object.id);
        await this.repository.save(object);
    }
    async findAll(): Promise<Array<T>> {
        return await this.repository.find();
    }
    async findById(object: T): Promise<T | null> {
        return await this.repository.findOne({ where: [{ id: object.id }] });
    }
    async find(objectQuery: T): Promise<Array<T>> {
        throw new Error("Method not implemented.");
    }
    async delete(object: T) {
        await this.repository.delete(object.id);
    }

}

En mi findById el findOne me da un error:

The type '{ id: number; }[]' cannot be assigned to type 'FindOptionsWhere<T> | FindOptionsWhere<T>[] | undefined'.
  The type '{ id: number; }[]' cannot be assigned to type 'FindOptionsWhere<T>[]'.
    The type '{ id: number; }' cannot be assigned to type 'FindOptionsWhere<T>'.

No he encontrado nada sobre esto en la documentación, ¿alguien puede ayudar? :/

He continuado escribiendo en la clase concreta para continuar mi proyecto

Respuesta #1

public async findOne(id: number): Promise<T> {
    return await this.repository.findOneBy({ id } as FindOptionsWhere<T>)
}

Artículos relacionados