键入“用户|未定义”不能分配给“用户”类型

时间:2019-09-28 19:06:09

标签: typescript koa

用户控制器:

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:键入“用户|未定义”无法分配给“用户”类型。     无法将“未定义”类型分配给“用户”类型。

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 个答案:

答案 0 :(得分:1)

如果找不到用户,则

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

请注意,这最后一个解决方案是强制转换,仅当您确定会找到用户时才执行此操作(对于您而言,我认为不是这样)。

答案 1 :(得分:1)

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

由于还可以定义用户,因此您必须将const user: User更改为const user: User | undefined

因为有

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

紧接着,我猜用户可能是不确定的。