TypeScript使用“ as”强制转换

时间:2018-09-12 13:15:54

标签: javascript typescript

我试图将类型any转换为布尔值。所以我只是这样做:

let a = (<any>myType) as boolean;

但是a不是布尔值,它仅包含myType值。 但是,当我尝试这样做时:

let b = Boolean(myType);

b返回一个布尔值,该布尔值是false。

我是否缺少有关“ as”强制转换的内容?

哪个是正确的布尔类型?

1 个答案:

答案 0 :(得分:4)

铸造-更恰当的说是type assertion-不是转换/强制转换。它在TypeScript中没有运行时影响。¹这只是告诉TypeScript变量或属性属于您要将其广播到断言的类型的过程。在第一个示例中,a获得的值与myType完全相同,只是TypeScript编译器认为a包含布尔值。该类型信息在代码运行之前就消失了,因为TypeScript被编译为JavaScript而不修饰代码以传达类型信息,并且JavaScript变量被松散地键入。

要实际转换值,请改用转换(例如Boolean(myType)示例)。


¹请勿将其概括化为其他语言,例如Java或C#。这是TypeScript调用流程 type断言而不是强制转换的原因之一。 在很大程度上是真的,在这些语言中转换也不是转换,但不是完全转换,而在其他语言中单独转换可能会影响运行时行为。