Общий тип в typeorm и nestjs - PullRequest
       16

Общий тип в typeorm и nestjs

0 голосов
/ 19 февраля 2019

Я пытаюсь создать базовый сервис, который будет расширяться.Служба принимает универсальный тип, который будет типом Entity, который использует typeorm, у этого типа должно быть несколько реквизитов, и поэтому я хочу расширить интерфейс с такими реквизитами:

import { getManager, FindConditions, Repository } from "typeorm";
import { UserInterface } from "./user.interface";

export abstract class UserService<User extends UserInterface> {
  constructor(
    private readonly User: new () => User,
    protected readonly userRepository: Repository<User>,
  ) {}

  async findAll(): Promise<User[]> {
    return await this.userRepository.find();
  }

  abstract async findOnePopulated(where: FindConditions<User>): Promise<User>;

  async findOneById(id: number): Promise<User> {
    return await this.findOnePopulated({ id });
  }

  async updateUser(userId: number): Promise<User> {
    const em = getManager();
    const user = await this.userRepository.findOne(userId);

    await em.update(this.User, userId, user);
    return user;
  }
}

Я получаю ошибку типапри этом вызове findOnePopulated({ id })

[ts] Argument of type '{ id: number; }' is not assignable to parameter of type
'FindConditions<User>'. [2345]

и этот em.update(this.User, userId, user) также показывает ошибку типа:

[ts]
Argument of type 'User' is not assignable to parameter of type 'QueryDeepPartialEntity<User>'.
  Type 'UserInterface' is not assignable to type 'QueryDeepPartialEntity<User>'. [2345]

Кажется, что не отображаются какие-либо ошибки, если я переключаю все Userвместо UserInterface, что-то не так с использованием синтаксиса <User extends UserInterface>?

Я просто хочу убедиться, что универсальный тип пользователя, по крайней мере, имеет реквизиты в UserInterface.

Здесьмой пользовательский интерфейс:

import { BaseEntity } from "typeorm";

export interface UserInterface extends BaseEntity {
  id: number;
}

1 Ответ

0 голосов
/ 19 февраля 2019

Мне понадобилось время, чтобы разобраться с этим, но я предполагаю, что ваша UserInterface является причиной этих проблем.У вас нет сущности под названием Пользователь?Есть ли у UserInterface ключ id с типом number?Вы объявили, что UserInterface является Entity?Если бы вы могли предоставить свой UserInterface, я посмотрю по-другому, но я думаю, что это не сущность @Entity(), и поэтому она не зарегистрирована в диспетчере сущностей typeorm и т. Д.

...