typescript - 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”加下划线
对象可能是“未定义”
我该如何解决?
谢谢
解决方案
这是正确的做法:
this.currentUser = JSON.parse(localStorage.getItem('currentUser')!) || {};
这是因为:
- 虽然
JSON.parse(null)
从 TS 的角度来看是无效的,但它仍然有效并且会导致null
- 因此
JSON.parse(localStorage.getItem('currentUser')!)
将要么在本地存储中返回对象,要么null
- 最后
|| {}
,你说,它肯定会返回一些东西
推荐阅读
- django - 使用 GET 方法从表单中获取数据
- r - R - 如何按多个组对变量求和
- apache-spark - Spark 中的第一阶段行动仅由一个执行者运行
- botframework - MS TEAMS 聊天机器人:我可以将我的 MS Botframework 聊天机器人限制为仅使用我的 MS Teams 租户 ID 而不需要额外的身份验证吗
- sql - Oracle 选择不同的合并重复项
- java - 当blockingqueue为空时杀死消费者
- java - 在java中加密文件的内容而无需手动指定加密密钥
- reactjs - 在 REACT APP 中使用高效的缓存策略服务静态资产
- r - Opencage 包,无法进行批量地理编码工作
- performance - 将调试构建模式更改为发布构建模式时没有性能提升?