javascript - typescript ,JSON.parse 错误 : "Type ' null' is not assignable to type 'string' .“

标签 javascript typescript local-storage

错误发生在这里:

let moonPortfolio;
...
moonPortfolio = JSON.parse(localStorage.getItem('moonPortfolio'));

我找到了 this answer这是有道理的,但是在这次重构之后我仍然得到这个错误:

As the error says, localStorage.getItem() can return either a string or null. JSON.parse() requires a string, so you should test the result of localStorage.getItem() before you try to use it.

if (portfolio.length === 0) {
  const storedPortfolio = localStorage.getItem('moonPortfolio');

  if (typeof storedPortfolio === 'string') {
    moonPortfolio = JSON.parse(localStorage.getItem('moonPortfolio'));
  }
  else {
    moonPortfolio = [];
  }

  if (moonPortfolio) {
    const savedPortfolio = Object.values(moonPortfolio);
    this.props.fetchAllAssets();
    // this.props.addCoins(savedPortfolio);
  }
}

enter image description here

我首先将 localStorage moonPortfolio 的结果设置为一个 var,然后检查 var 是否为 typeof 字符串。仍然收到 typescript 错误?

这里有什么想法或方向吗?

最佳答案

简单修复:

JSON.parse(localStorage.getItem('moonPortfolio') || '{}');

似乎 TS 实际上知道 localStorage/sessionStorage 的内部工作原理。如果您尝试获取未设置的 key ,它会返回 nullnull 当被视为 boolean 时是假的,因此通过添加 OR 将使用空的字符串化 json 对象,这意味着 JSON.parse(x) 将总是给出一个字符串,这意味着它是安全的。

关于javascript - typescript ,JSON.parse 错误 : "Type ' null' is not assignable to type 'string' .“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54715260/

相关文章:

javascript - onMouseOver(SomeInt, SomeString) 不起作用

angular - ngx-捕获 : Unable to capture <img> inside the screen capture area

git - 如何使用 yarn 从 github 添加一个使用 typescript 且未编译的包?

Javascript:如何将更多文本附加到用户复制的文本ala nydailynews.com

javascript - 服务更新时 Angular Controller 不更新

javascript - 为什么我的计算属性在 Object.assign 之后无效?

reactjs - React TypeScript 使用组件的 props 声明接口(interface)

javascript - 如何在 JavaScript 单元测试中模拟 localStorage?

javascript - localStorage 按值排序

javascript - "Updating"通过 jQuery 和 localStorage 的网页