在打字稿中,我们可以使用以下方法将字符串转换为数字:
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
}
}
答案 0 :(得分:4)
+
运算符为数字执行类型转换。至于布尔值,falsy和truthy术语用于描述强制值。可以使用Boolean
内置或!!
快捷方式执行类型转换; 'false'
和'true'
字符串都是真实的:
true === Boolean('true');
true === !!'false';
由于布尔值可以是true
或false
,因此解析字符串值没有意义。考虑到'true'
将转换为true
而'false'
将转换为false
,目前还不清楚将'foo'
字符串转换为什么字段 - 没有{{}布林分子的对应物,因为它们是布尔值。
特殊问题特定于Angular组件输入,正如另一个答案所提到的那样。
NaN
等于input="true"
,即attribute binding,输入值为字符串。
虽然input="{{ true }}"
为property binding,但输入值与传递给输入的类型相同。布尔值将保持布尔值,不需要转换。
答案 1 :(得分:3)
@input
应使用 []
表示,以解决您的问题
<component [input]="true"></component>