据我了解,我无法将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')
谢谢。
答案 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;