Angular 类型编号不可分配给 if 语句的左侧

Angular Type Number is not assignable to left side of if statement

我正在 return 拨打一个 php 电话。当我 return 订阅函数中的值时,控制台正确打印数字。当我尝试 运行 if 语句对 return 执行操作时,我在代码中收到一个错误,我不知道如何修复。我环顾四周,但找不到这个问题的任何答案。

这一切都发生在订阅函数内部。我无法在订阅之外引用变量 accountStatus。

this.apiService.checkAccountStatus().subscribe((accountStatus)=>{
      console.log("user account", accountStatus);
      if(accountStatus = 0)
      {
        //account doesn't exist
        console.log("user doesn't exits.", accountStatus);
      }
      if(accountStatus = 1)
      {
        //account does exist
        console.log("user does exist.", accountStatus);
      }
    })

我收到的调试错误:

Type 'number' is not assignable to type 'Account_Info'.ts(2322)

Account_Info 是我用来访问数据库的ts文件的名字。在我的 apiService.checkAccountStatus() 函数中,它是这样的:

checkAccountStatus(){
  return this.httpClient.get<Account_Info>(`${this.PHP_API_SERVER}/api/checkaccount.php`, {withCredentials: true});
}

欢迎任何建议。谢谢!

首先,更改可观察对象的类型。

checkAccountStatus(){
  return this.httpClient.get<number>(`${this.PHP_API_SERVER}/api/checkaccount.php`, {withCredentials: true});
}

然后,设置订阅者的类型,同时注意,你是在赋值而不是比较。

this.apiService.checkAccountStatus().subscribe((accountStatus:number)=>{
      console.log("user account", accountStatus);
       if(accountStatus === 0)  // you have (accountStatus = 0)
          {
            //account doesn't exist
            console.log("user doesn't exits.", accountStatus);
          }
          if(accountStatus === 1) // you have (accountStatus = 1)
          {
            //account does exist
            console.log("user does exist.", accountStatus);
          }
})
this.apiService.checkAccountStatus().subscribe((accountStatus:any)=>{
      console.log("user account", accountStatus);
      if(accountStatus = 0)
      {
        //account doesn't exist
        console.log("user doesn't exits.", accountStatus);
      }
      if(accountStatus = 1)
      {
        //account does exist
        console.log("user does exist.", accountStatus);
      }
    })

你需要定义 accountStatus 的类型,就像我定义的上面的代码 accountStatus:any 一样,使用这个代码,让我知道它是否有效

如果Account_Info是一个接口,它确实不是一个数字。您可以将其记录到控制台,因为您可以记录任何内容。您无法检查类型 Account_Info 是否为 TypeScript 中的数字。同样在 if 子句中,您是 分配 ,而不是 比较 值。您必须使用以下内容:

//...
if(+accountStatus == 0) console.log("user doesn't exist", accountStatus)
else if(+accountStatus == 1) console.log("user does exist.", accountStatus);
//...

accountStatus 之前加一个加号的原因是 JavaScript 中的一元运算符 + 试图将其后面的值转换为数字。更多信息:Unary Plus on MDN

N.B.: 这只有在值确实是一个数字时才有效。否则,+accountStatus 将是 NaN(不是数字)。