用户控制器:
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;
}
不知道如何解决此问题。
答案 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;
}
紧接着,我猜用户可能是不确定的。