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;