Тип 'Пользователь |undefined "нельзя назначить типу" Пользователь " - PullRequest
1 голос
/ 28 сентября 2019

Контроллер пользователя:

import { User } from './user';

export class UserController {
public static async getuser(ctx: BaseContext) {
  const userRepository: Repository<User> = getManager().getRepository(User);
  const user: User = await userRepository.findOne(ctx.params.id); // error on this line

  if (user) {
    ctx.status = 200;
    ctx.body = user;
  }
}

Я получаю сообщение об ошибке:

Ошибка TS2322: Тип 'Пользователь |undefined 'нельзя назначить типу' User '.Тип 'undefined' нельзя назначить типу 'User'.

файл user.ts (этот файл я импортирую выше):

@Entity('users')
export class User {
  @PrimaryGeneratedColumn()
  id: number | undefined;

  @Column({ type: 'varchar', nullable: true, unique: true })
  username: string | undefined;

  @Column({ type: 'text' })
  password: string | undefined;

  @CreateDateColumn()
  createdAt: Date | undefined;

  @UpdateDateColumn()
  updatedAt: Date | undefined;
}

Не могу понять, вкак это исправить.

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Как говорит ошибка, вы пытаетесь присвоить тип 'Пользователь |undefined '(userRepository.findOne (), ожидаемое поведение при передаче идентификатора несуществующего пользователя) типу "Пользователь" (постоянный пользователь).

Поскольку пользователь также может быть неопределенным, необходимоизменить const user: User на const user: User | undefined.

Так как сразу после

if (user) {
    ctx.status = 200;
    ctx.body = user;
  }

, я предполагаю, что пользователь может быть неопределенным.

1 голос
/ 28 сентября 2019

userRepository.findOne(ctx.params.id); может быть undefined, если пользователь не найден.Два решения:

Рассматривать поиск как ошибочный:

const user: User | undefined = await userRepository.findOne(ctx.params.id);

Или считать, что пользователь будет найден:

const user: User = await userRepository.findOne(ctx.params.id)!;

Обратите внимание, что это последнее решение является приведением, делайте это только в том случае, если вы уверены, что пользователь будет найден (в вашем случае я так не думаю).

...