'boolean | undefined' 类型的参数不能分配给 'boolean' 类型的参数
Argument of type 'boolean | undefined' is not assignable to parameter of type 'boolean'
我试图在 Angular 应用程序中插入一个身份验证系统。 (This one.
完成一切后,我得到了这个代码:
private userCurrentState = new BehaviorSubject<boolean>(this.tokenAuthService.isSignedin());
这个错误信息
Argument of type 'boolean | undefined' is not assignable to parameter of type 'boolean'.
TokenAuthService
代码
getJwtToken(){
return localStorage.getItem('auth_token');
}
validateToken(){
const token = this.getJwtToken();
if(token){
const payload = this.payload(token);
if(payload){
return Object.values(this.tokenIssuer).indexOf(payload.iss) > -1 ? true : false;
}
} else {
return false;
}
}
isSignedin() {
return this.validateToken();
}
我不知道为什么。有人在这里帮忙吗?非常感谢:)
调用 this.tokenAuthService.isSignedin()
可能 return 未定义,而 BehaviorSubject 需要一个布尔值。
您可以通过使用布尔变量来解决这个问题,并让变量检查函数调用以将其自身设置为 true(如果为真)或 false(如果为 false 或未定义)。
允许BehaviourSubject
接受undefined
数据类型
变化
private userCurrentState = new BehaviorSubject<boolean>(this.tokenAuthService.isSignedin());
到
private userCurrentState = new BehaviorSubject<boolean | undefined>(this.tokenAuthService.isSignedin());
或
由于您的 isSignedin
取决于 validateToken()
,
将其标记为 return 输入 boolean
validateToken(): boolean{
const token = this.getJwtToken();
if(token){
const payload = this.payload(token);
if(payload){
return Object.values(this.tokenIssuer).indexOf(payload.iss) > -1 ? true : false;
}
return false; // you can return false here
} else {
return false;
}
}
好的,也许以上答案可以解决问题,但它们没有解释为什么您的函数 validateToken 的 return 值结果为未定义。
validateToken(){
const token = this.getJwtToken();
if(token){
const payload = this.payload(token);
if(payload){
return Object.values(this.tokenIssuer).indexOf(payload.iss) > -1 ? true : false;
}
// You will get undefined here if payload is a falsy value
// and thus you are getting <boolean|undefined> as result type.
// One option is to provide else when !payload
} else {
return false;
}
}
我试图在 Angular 应用程序中插入一个身份验证系统。 (This one.
完成一切后,我得到了这个代码:
private userCurrentState = new BehaviorSubject<boolean>(this.tokenAuthService.isSignedin());
这个错误信息
Argument of type 'boolean | undefined' is not assignable to parameter of type 'boolean'.
TokenAuthService
代码
getJwtToken(){
return localStorage.getItem('auth_token');
}
validateToken(){
const token = this.getJwtToken();
if(token){
const payload = this.payload(token);
if(payload){
return Object.values(this.tokenIssuer).indexOf(payload.iss) > -1 ? true : false;
}
} else {
return false;
}
}
isSignedin() {
return this.validateToken();
}
我不知道为什么。有人在这里帮忙吗?非常感谢:)
调用 this.tokenAuthService.isSignedin()
可能 return 未定义,而 BehaviorSubject 需要一个布尔值。
您可以通过使用布尔变量来解决这个问题,并让变量检查函数调用以将其自身设置为 true(如果为真)或 false(如果为 false 或未定义)。
允许BehaviourSubject
接受undefined
数据类型
变化
private userCurrentState = new BehaviorSubject<boolean>(this.tokenAuthService.isSignedin());
到
private userCurrentState = new BehaviorSubject<boolean | undefined>(this.tokenAuthService.isSignedin());
或
由于您的 isSignedin
取决于 validateToken()
,
将其标记为 return 输入 boolean
validateToken(): boolean{
const token = this.getJwtToken();
if(token){
const payload = this.payload(token);
if(payload){
return Object.values(this.tokenIssuer).indexOf(payload.iss) > -1 ? true : false;
}
return false; // you can return false here
} else {
return false;
}
}
好的,也许以上答案可以解决问题,但它们没有解释为什么您的函数 validateToken 的 return 值结果为未定义。
validateToken(){
const token = this.getJwtToken();
if(token){
const payload = this.payload(token);
if(payload){
return Object.values(this.tokenIssuer).indexOf(payload.iss) > -1 ? true : false;
}
// You will get undefined here if payload is a falsy value
// and thus you are getting <boolean|undefined> as result type.
// One option is to provide else when !payload
} else {
return false;
}
}