首页 > 解决方案 > 为什么打字稿要求我设置布尔类型的值?

问题描述

function f1()
{
    const v : string = String();

    if(v) {alert("IF");} // OK

    const b : boolean = v; // Type 'string' is not assignable to type 'boolean'.

    if(b) {alert("BOOLEAN");}
}

f1();

现在我对这个问题的解决方案是双感叹号,但我闻到麻烦或者我错了:

    const b : boolean = !!v; //OK

我用这个quide作为基础

标签: typescripttype-conversionboolean

解决方案


这是一个类型安全的决定。if您可以在(或预期条件的其他地方,例如while或)中使用任何类型,?:因为这在 JS 中有效并且是常见的做法。

如果您显式声明一个 type 变量boolean,这意味着您要将可能的值限制为trueor falseundefined并且null如果您不使用strictNullChecks)。由于 Typescript 不执行运行时转换,如果您的分配被允许,b将包含一个string. 当然,如果在条件句中使用它会起作用,但===例如可能会产生意想不到的结果。

将任何值的类型转换为boolean使用双重否定(!!)在 JS 中很常见,并且很好用。


推荐阅读