类型 'User | undefined' 不可分配给类型 'User'

Type 'User | undefined' is not assignable to type 'User'

用户控制器:

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;
  }
}

我收到一个错误:

error TS2322: Type 'User | undefined' is not assignable to type 'User'. Type 'undefined' is not assignable to type '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;
}

不知道如何解决这个问题。

如果没有找到用户,

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)!;

请注意,最后一个解决方案是强制转换,只有当您确定会找到用户时才这样做(在您的情况下我不这么认为)。

如错误所述,您正在尝试将类型 'User | undefined'(userRepository.findOne(),传递不存在的用户 ID 时的预期行为)分配给类型 'User'(常量用户)。

由于用户也可以是undefined,你必须把const user: User改成const user: User | undefined

既然有

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

紧接着,我猜 user 可能是未定义的。