Javascript Typescript/Angular:相当于布尔类型的加号运算符

Javascript Typescript/Angular:相当于布尔类型的加号运算符,javascript,angular,typescript,Javascript,Angular,Typescript,在typescript中,我们可以使用以下命令将字符串转换为数字: let asText: string = "123"; let asNumerals: number = +asText; 如何对布尔类型实现同样的效果: let asText: string = "true"; console.log(+asText); // NaN console.log(typeof asText); // string let b: boolean = +asText; // does not com

在typescript中,我们可以使用以下命令将字符串转换为数字:

let asText: string = "123";
let asNumerals: number = +asText;
如何对布尔类型实现同样的效果:

let asText: string = "true";
console.log(+asText); // NaN
console.log(typeof asText); // string
let b: boolean = +asText; // does not compile
纯JS方法产生正确的结果:

let b: boolean = asText == "true"; // Works as expected but not good enough
但这种解决方案还不够好,例如:

<component input="true"></component>

@Component()
export class Component {

    @Input()
    private input: boolean;


    ngOnInit() {
        console.log(typeof input); // string
    }

}

@组件()
导出类组件{
@输入()
私有输入:布尔;
恩戈尼尼特(){
console.log(输入类型);//字符串
}
}

组件中的
应使用
[]
表示,这将解决您的问题

<component [input]="true"></component>

+
运算符对数字执行类型转换。对于布尔值,和术语用于描述强制值。类型转换可以使用内置的或
布尔值执行快捷方式;
'false'
'true'
字符串都是真实的:

true === Boolean('true');
true === !!'false';
由于布尔值可以是
true
false
,因此解析字符串值没有意义。考虑到
'true'
将被转换为
true
'false'
将被转换为
false
,我们不清楚
'foo'
字符串将被转换为什么-布尔型没有对应的
NaN
,因为它们是布尔型的

正如另一个答案所提到的,特定的问题是特定于角度分量输入的

input=“true”
等于
input=“{{true}}”
,也就是说,输入值将是一个字符串


[input]=“true”
为,并且输入值将与传递给输入的类型相同。布尔值将保持为布尔值,不需要进行转换。

让b:Boolean=asText==“true”-为什么它不够好?如我的组件中所示,我首先需要测试布尔值是布尔值还是字符串,然后将其转换为布尔值。您的角度模板代码有缺陷。如果要将实际布尔值作为输入传递,它应该是
[input]=“true”
。否则,您将传递一个字符串。只要修改模板代码,我不认为buggy这个词。这就是在数字上使用+运算符的原因。对布尔人没有等价物吗?这是一辆马车。如果输入类型为boolean,则不应传递字符串。当然,您也可以尝试接受字符串“true”,但它在哪里停止?为什么不接受“真”、“是”或“开”?简单明了:如果输入是布尔值,那么你接受布尔值。如果调用方出错并传递字符串,则是调用方的问题。