错误发生在这里:
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);
}
}
我首先将 localStorage moonPortfolio
的结果设置为一个 var,然后检查 var 是否为 typeof
字符串。仍然收到 typescript 错误?
这里有什么想法或方向吗?
最佳答案
简单修复:
JSON.parse(localStorage.getItem('moonPortfolio') || '{}');
似乎 TS 实际上知道 localStorage/sessionStorage 的内部工作原理。如果您尝试获取未设置的 key ,它会返回 null
。 null
当被视为 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/