我试图将类型any
转换为布尔值。所以我只是这样做:
let a = (<any>myType) as boolean;
但是a
不是布尔值,它仅包含myType
值。
但是,当我尝试这样做时:
let b = Boolean(myType);
b
返回一个布尔值,该布尔值是false。
我是否缺少有关“ as”强制转换的内容?
哪个是正确的布尔类型?
答案 0 :(得分:4)
铸造-更恰当的说是type assertion-不是转换/强制转换。它在TypeScript中没有运行时影响。¹这只是告诉TypeScript变量或属性属于您要将其广播到断言的类型的过程。在第一个示例中,a
获得的值与myType
完全相同,只是TypeScript编译器认为a
包含布尔值。该类型信息在代码运行之前就消失了,因为TypeScript被编译为JavaScript而不修饰代码以传达类型信息,并且JavaScript变量被松散地键入。
要实际转换值,请改用转换(例如Boolean(myType)
示例)。
¹请勿将其概括化为其他语言,例如Java或C#。这是TypeScript调用流程 type断言而不是强制转换的原因之一。 在很大程度上是真的,在这些语言中转换也不是转换,但不是完全转换,而在其他语言中单独转换可能会影响运行时行为。