对象可能是“空”.ts(2531)

Posted

技术标签:

【中文标题】对象可能是“空”.ts(2531)【英文标题】:Object is possibly 'null'.ts(2531) 【发布时间】:2021-06-06 08:57:10 【问题描述】:

我正在使用带有 Typescript 的 Node。我正在寻找一个 mongodb 文档并将一些值更新到其中,然后保存它。 在语句保存中显示此错误。 下面是代码:

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

在等待 user.save() 行上显示此错误。

【问题讨论】:

您将此标记为 tslint,这是 tslint 错误还是硬 typescript 错误? 【参考方案1】:

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

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

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

【讨论】:

对我有用。谢谢。仍在寻找确切原因,如果有人知道,请告诉我们。【参考方案2】:

这意味着用户可以是null

可以使用条件语句:

if(user)
 await user.save()

或optional chaining:

await user?.save()

【讨论】:

对于使用条件语句的第一个解决方案,您可以在我正在使用的问题中看到,对于通过 npm run build 构建代码的第二个解决方案,它会更改为 user ? 。保存() ;所以这也行不通。 你是对的!您能否分享可重现的示例 上面的代码可以帮你复现,我想,你必须创建一个mongoose模型,然后在函数中调用上面的代码。 很费时间

以上是关于对象可能是“空”.ts(2531)的主要内容,如果未能解决你的问题,请参考以下文章

笑话测试显示对象可能是“空”错误

嘴巴题1 LA2531 足球联赛

无法解决 ts 错误:对象可能是“未定义”.ts(2532)

对象可能是带有可选参数的 'undefined'.ts(2532)

无法调用可能是“未定义”的对象。ts(2722)

即使在未定义检查之后,打字稿“错误 TS2532:对象可能是‘未定义’”