Error: "Type 'string | null' is not assignable ..." when getting Item from LocalStorage
Error: "Type 'string | null' is not assignable ..." when getting Item from LocalStorage
据我了解,我无法将 null 分配给字符串变量。我不明白为什么检查 localStorage.getItem('language')
设置的 if 子句不能解决这个问题。
错误:类型 'string | null' 不可分配给类型 'string'。
类型 'null' 不可分配给类型 'string'.
setLanguage(lang: string) {
if (lang) {
this.language = i18n.locale = lang
localStorage.setItem('language', lang)
} else {
if (localStorage.getItem('language')) {
this.language = i18n.locale = localStorage.getItem('language')
} else {
let browserLang = navigator.language.split('-')[0]
this.language = i18n.locale = browserLang
localStorage.setItem('language', browserLang)
}
}
}
谢谢。
我认为这是因为您没有将它分配给变量。第一次和第二次调用 localStorage.getItem('language')
可能会 return 不同的结果(就打字稿编译器而言)。
您可能想尝试类似的方法:
setLanguage(lang: string) {
if (lang) {
this.language = i18n.locale = lang
localStorage.setItem('language', lang)
} else {
const lang: string | null = localStorage.getItem('language'); // Notice how I'm setting a new variable here
if (lang) {
this.language = i18n.locale = lang;
} else {
let browserLang = navigator.language.split('-')[0]
this.language = i18n.locale = browserLang
localStorage.setItem('language', browserLang)
}
}
}
这里的问题是 localStorage return string | null
和 isTokenExpired() jwt 的辅助方法只需要 string | undefine
。价值。所以你可以做这样的事情。
在传递之前检查该值是否为空。或者,如果它为 null,则将其值更改为 undefined
const lan= localStorage.getItem('language');
if (language)
this.language = i18n.locale = lang;
据我了解,我无法将 null 分配给字符串变量。我不明白为什么检查 localStorage.getItem('language')
设置的 if 子句不能解决这个问题。
错误:类型 'string | null' 不可分配给类型 'string'。 类型 'null' 不可分配给类型 'string'.
setLanguage(lang: string) {
if (lang) {
this.language = i18n.locale = lang
localStorage.setItem('language', lang)
} else {
if (localStorage.getItem('language')) {
this.language = i18n.locale = localStorage.getItem('language')
} else {
let browserLang = navigator.language.split('-')[0]
this.language = i18n.locale = browserLang
localStorage.setItem('language', browserLang)
}
}
}
谢谢。
我认为这是因为您没有将它分配给变量。第一次和第二次调用 localStorage.getItem('language')
可能会 return 不同的结果(就打字稿编译器而言)。
您可能想尝试类似的方法:
setLanguage(lang: string) {
if (lang) {
this.language = i18n.locale = lang
localStorage.setItem('language', lang)
} else {
const lang: string | null = localStorage.getItem('language'); // Notice how I'm setting a new variable here
if (lang) {
this.language = i18n.locale = lang;
} else {
let browserLang = navigator.language.split('-')[0]
this.language = i18n.locale = browserLang
localStorage.setItem('language', browserLang)
}
}
}
这里的问题是 localStorage return string | null
和 isTokenExpired() jwt 的辅助方法只需要 string | undefine
。价值。所以你可以做这样的事情。
在传递之前检查该值是否为空。或者,如果它为 null,则将其值更改为 undefined
const lan= localStorage.getItem('language');
if (language)
this.language = i18n.locale = lang;