错误:从LocalStorage获取项目时出现“类型'string | null'无法分配...”的错误

时间:2019-04-13 15:49:25

标签: typescript eslint tslint

据我了解,我无法将null分配给字符串变量。我不明白为什么检查new Client { ClientId = "tableau", ClientSecrets = { new Secret("[my secret]", "tableau.secret") { Type = SecretTypes.SharedSecret }, }, AllowedGrantTypes = GrantTypes.CodeAndClientCredentials, AllowAccessTokensViaBrowser = true, AccessTokenType = AccessTokenType.Jwt, RedirectUris = { "http://[tableuServer]/vizportal/api/web/v1/auth/openIdLogin" }, AllowOfflineAccess = true, AllowedScopes = { IdentityServerConstants.StandardScopes.OpenId, IdentityServerConstants.StandardScopes.Profile, IdentityServerConstants.StandardScopes.Email, IdentityServerConstants.StandardScopes.Phone, IdentityServerConstants.StandardScopes.Address } }, 是否已设置的if子句无法解决此问题。

错误:输入'string | “ null”不可分配给“ string”类型。 不能将'null'类型分配给'string'类型。

localStorage.getItem('language')

谢谢。

2 个答案:

答案 0 :(得分:1)

我认为这是因为您没有将其分配给变量。第一次和第二次调用localStorage.getItem('language')可能会返回不同的结果(就打字稿编译器而言)。
您可能想尝试类似的东西:

  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)
      }
    }
  }

答案 1 :(得分:0)

这里的问题是jwt的localStorage返回string | null和isTokenExpired()辅助方法只需要string | undefine。价值。所以你可以做这样的事情。 在传递之前检查该值是否为空。或者,如果它是 null 将其值更改为 undefined

const lan= localStorage.getItem('language');

if (language)
  this.language = i18n.locale = lang;