不明白为什么布尔比较失败

时间:2019-03-07 16:40:17

标签: angular

这是角度的新手,而不是经验最丰富的javascript / typescript开发人员。通常是较小的项目。

目前不知道为什么这种比较失败。

function zip ($obj1, $obj2, $rs) { [Linq.Enumerable]::Zip($obj1, $obj2, [Func[Object, Object, Object]]$rs) }

$table_1 = Import-Csv -Delimiter " " -Path .\file1.csv
$table_2 = Import-Csv -Delimiter " " -Path .\file2.csv

zip $table_1 $table_2 { param($t1, $t2) $t1.col3 = $t2.colB }

$table_1 | Export-Csv -Path .\file1.csv -Delimiter " " -Encoding Oem -NoTypeInformation

我得到的数据结构定义为

if(data.success == true) {
      //do stuff
    }

export class RegResponse { success : boolean; error : string; constructor(success: boolean, error: string){ this.success = success; this.error = error; } 的数据。成功为真。

console.log是字符串(由于某种原因)? 但是,如果我尝试对该变量进行字符串比较,则声明该变量将引发不适用于布尔值的操作的错误。

所以我很困惑为什么这不起作用。

这是一个可行的解决方案,但是我不明白为什么明显的第一次比较失败了。

console.log(typeof(data.success))

2 个答案:

答案 0 :(得分:4)

您将success声明为布尔值这一事实并不意味着您的服务将为您返回布尔值。如果端点返回一个字符串,则它是一个字符串。

Typescript用于类型定义,它只是说“我希望在这里有一个字符串,那里是一个布尔值”的一种方式,但是如果源未知,则必须自己进行检查。

分配data.success时,您可以执行以下操作:

data.success = response.success === 'true';

作为进一步的解决方案,如果您使用的是Angular 4+,则可以仅在Http客户端中指定接口即可实现安全的类型检查系统。

您可以在official guide中阅读更多内容:

getReg() {
  // it will return an Observable of RegResponse
  return this.http.get<RegResponse>(this.configUrl);
}

但是它不能帮助您转换布尔值中的字符串,如果您期望某些东西并得到其他东西,这只会失败!

答案 1 :(得分:0)

如果“ data.success”仅是true,false,“ true”或“ false”,则可以尝试:if(JSON.parse(data.success)) { //code }