Typescript,无法读取会话存储中存储的数组
假设我有一个arroy作为字符串存储在会话存储中,我想读取它,添加一个元素,然后将其设置回原处Typescript,无法读取会话存储中存储的数组,typescript,Typescript,假设我有一个arroy作为字符串存储在会话存储中,我想读取它,添加一个元素,然后将其设置回原处 trackNavHistory = (path: String) => { let historyArr : Array<String> = sessionStorage.getItem("navHistory")?.split(","); historyArr.push(path) sessionStorage.set
trackNavHistory = (path: String) => {
let historyArr : Array<String> = sessionStorage.getItem("navHistory")?.split(",");
historyArr.push(path)
sessionStorage.setItem(JSON.stringify(historyArr));
}
trackNavHistory=(路径:字符串)=>{
let historyArr:Array=sessionStorage.getItem(“navHistory”)?.split(“,”);
历史到达推送(路径)
setItem(JSON.stringify(historyArr));
}
所以historyArr基本上应该是从sessionStorage读取的字符串数组
但它又回来了
类型“string[]| undefined”不能分配给类型“string[]”。类型“未定义”不可分配给类型“字符串[]” 然后我就不能把它放回去了。 什么问题 我也试过了
trackNavHistory = (path: String) => {
let historyArr : Array<String> = JSON.parse(sessionStorage.getItem("navHistory"));
historyArr.push(path)
sessionStorage.setItem(JSON.stringify(historyArr));
}
trackNavHistory=(路径:字符串)=>{
让historyArr:Array=JSON.parse(sessionStorage.getItem(“navHistory”);
历史到达推送(路径)
setItem(JSON.stringify(historyArr));
}
类型为“string | null”的参数不能分配给的参数
键入“string”。类型“null”不可分配给类型
'字符串'.ts(2345)
首先,get和set应该是相反的-不要试图欺骗JSON 其次,这不是“崩溃”,而是TypeScript编译器错误。TypeScript告诉您需要检查是否没有值(
getItem
返回类型为string | null
,您需要string
类型)
为了解决这个问题
首先,get和set应该是相反的-不要试图欺骗JSON 其次,这不是“崩溃”,而是TypeScript编译器错误。TypeScript告诉您需要检查是否没有值(
getItem
返回类型为string | null
,您需要string
类型)
为了解决这个问题
在typescript中定义
字符串
类型的常见做法是使用以小写字母开头的字符串
关键字
你的第二种方法是正确的。在将数据持久化到sessionStorage
和JSON.parse
中之前,应该使用JSON.stringify
,以从JSON获取数组
let historyArr
声明为一个变量,该变量只能保存字符串数组let historyArr:array
,但由于sessionStorage.getItem
可以返回string
或null
和JSON.parse(null)===null
typescript抱怨无法将此操作的结果(JSON.parse(sessionStorage.getItem(“navHistory”);historyArr.push(path)
)分配给historyArr
变量
我建议这样做:
const trackNavHistory = (path: string) => {
let navHistory = sessionStorage.getItem('navHistory');
if (!navHistory) {
sessionStorage.setItem('navHistory', JSON.stringify([path]));
return;
}
const historyArr: Array<string> = JSON.parse(navHistory);
historyArr.push(path);
sessionStorage.setItem('navHistory', JSON.stringify(historyArr));
};
const trackNavHistory=(路径:字符串)=>{
让navHistory=sessionStorage.getItem('navHistory');
如果(!navHistory){
setItem('navHistory',JSON.stringify([path]);
返回;
}
const historyArr:Array=JSON.parse(navHistory);
历史到达推送(路径);
setItem('navHistory',JSON.stringify(historyArr));
};
在typescript中定义字符串
类型的常见做法是使用以小写字母开头的字符串
关键字
你的第二种方法是正确的。在将数据持久化到sessionStorage
和JSON.parse
中之前,应该使用JSON.stringify
,以从JSON获取数组
let historyArr
声明为一个变量,该变量只能保存字符串数组let historyArr:array
,但由于sessionStorage.getItem
可以返回string
或null
和JSON.parse(null)===null
typescript抱怨无法将此操作的结果(JSON.parse(sessionStorage.getItem(“navHistory”);historyArr.push(path)
)分配给historyArr
变量
我建议这样做:
const trackNavHistory = (path: string) => {
let navHistory = sessionStorage.getItem('navHistory');
if (!navHistory) {
sessionStorage.setItem('navHistory', JSON.stringify([path]));
return;
}
const historyArr: Array<string> = JSON.parse(navHistory);
historyArr.push(path);
sessionStorage.setItem('navHistory', JSON.stringify(historyArr));
};
const trackNavHistory=(路径:字符串)=>{
让navHistory=sessionStorage.getItem('navHistory');
如果(!navHistory){
setItem('navHistory',JSON.stringify([path]);
返回;
}
const historyArr:Array=JSON.parse(navHistory);
历史到达推送(路径);
setItem('navHistory',JSON.stringify(historyArr));
};
您的变换输入和输出应该匹配。阅读时不需要JSON.parse
,但写作时需要JSON.stringify
。你写的和读的数据应该是相反的,所以不要试着去做一些事情。@crashmstr这就是我在第二个例子中所做的,但是它会使Touthink崩溃,告诉你错误是什么sessionStorage.getItem
被键入以返回string | null
JSON.stringify
采用string
。您需要向编译器“证明”getItem
不返回null。另外,您的setItem
调用缺少键
参数。而且,这不是“崩溃”。这是一个编译器错误,TypeScript告诉您,从类型安全的角度来看,您做了一些可能不正确的事情。您需要理解运行时和编译时之间的区别。该错误是编译器错误。你在会话中没有遇到问题