Typescript 类型';用户|未定义';不可分配给类型';用户';
用户控制器:Typescript 类型';用户|未定义';不可分配给类型';用户';,typescript,koa,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(
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;
}
}
无法确定如何修复此问题。
userRepository.findOne(ctx.params.id)如果找不到用户,则代码>可能是未定义的。两种解决方案:
将搜索视为faillible:
const user:user | undefined=wait userRepository.findOne(ctx.params.id);
或认为用户将被发现:
const user:user=wait userRepository.findOne(ctx.params.id)!;
请注意,最后一个解决方案是一个强制转换,只有在您确信会找到用户(在您的情况下,我不这么认为)时才执行此操作。正如错误所述,您试图将类型“User | undefined”(userRepository.findOne(),传递不存在的用户id时的预期行为)分配给类型“User”(const User)
由于用户也可以是未定义的,因此必须将const user:user
更改为const user:user |未定义的
既然有
if (user) {
ctx.status = 200;
ctx.body = user;
}
紧接着,我猜用户可以是未定义的。似乎是userRepository。findOne
返回未定义,我会看看methodconst user:user | undefined?^或者,如果未定义预期第二个解决方案没有效果,它仍然会抱怨,正如Jay Perl所说,第一个解决方案很难。
if (user) {
ctx.status = 200;
ctx.body = user;
}