首页 > 解决方案 > Angular - onfig.service.ts:11:1 - 错误 TS2532:对象可能是“未定义”

问题描述

在我的 Angular-11 config.service 中,我使用了:

var currentUser = JSON.parse(localStorage.getItem('user'));

我收到了这个错误:

错误 TS2345:类型为“字符串”的参数 | null' 不能分配给“字符串”类型的参数。类型“null”不能分配给类型“string”。10 var currentUser = JSON.parse(localStorage.getItem('user'));

然后当我将其更改为:

this.currentUser = JSON.parse(localStorage.getItem('currentUser') || '{}');

这个错误变成:

src/app/core/services/config.service.ts:11:1 - 错误 TS2532:对象可能是“未定义”。

11 this.currentUser = JSON.parse(localStorage.getItem('currentUser') || '{}');

然后“this”加下划线

对象可能是“未定义”

我该如何解决?

谢谢

标签: typescript

解决方案


这是正确的做法:

this.currentUser = JSON.parse(localStorage.getItem('currentUser')!) || {};

这是因为:

  • 虽然JSON.parse(null)从 TS 的角度来看是无效的,但它仍然有效并且会导致null
  • 因此JSON.parse(localStorage.getItem('currentUser')!)将要么在本地存储中返回对象,要么null
  • 最后|| {},你说,它肯定会返回一些东西

推荐阅读