对象可能是 'null'.ts(2531)

问题描述

我正在使用 Node 和 Typescript。我正在查找一个 mongodb 文档并将一些值更新到其中然后保存它。 在语句 save 上显示错误代码如下:

let user = await User.findById(id);
if (user) {
  user = Object.assign(user,req.body);
  await user.save();  // on this line error is shown
} else {
  throw "User not found";
}

在 await user.save() 行上显示错误

解决方法

这意味着用户可以是 null

您可以使用条件语句:

if(user){
 await user.save()
}

optional chaining

await user?.save()
,

我不知道为什么,但改变 user 变量似乎是导致问题的原因。

用一个新变量重写它在打字稿操场上对我来说效果很好(我不得不作弊以避免拥有真正的猫鼬模型,并且我编写了类型,但它应该是相同的想法):

type User = {
    email: string;
    save: () => Promise<void>
}

declare let user: User | null;

if (user) {
  const newUser = Object.assign(user,{ email: "test@example.com"})
  newUser.save();  // on this line error is shown
} else {
  throw "User not found";
}

https://www.typescriptlang.org/play?ssl=1&ssc=1&pln=13&pc=2#code/C4TwDgpgBAqgzhATlAvFA3gKCjqEC2AhgJYA2AXFHMIsQHYDmA3NrnIQG4SUAUAlKgB8UAAqIA9vmIIAPB3HEAJoMwBfTJkUQAxqUKJopCMCgBXBIkrwkUAD5Q6p0qRaZiAMyg9zSAVhza4nTUDhAA7tbIaADyAEYAVjrAAHSEcHDEDHTeFgA0GHhEZJQARMAQ1AACEAAehPhgRsmB+CWqfKx04ZHJ7Fz8TDgA9ENQQVDAABbSUKT00EgSyDNwk+JhdGp4pAgYrFMSYVAlkQ7iJu7ipnSKJSyqQA