我有以下代码。
let myVar = unknown;
myVar = 5;
console.log((myVar as string) + 5);
此代码的输出为10。然而,当我们添加字符串和数字时,它应该连接两个。在这种特殊的情况下,我以为我会得到55分;有人能澄清我的误解吗?
Typescript编译为javascript,javascript没有类型。因此,您的代码编译为:
let myVar;
myVar = 5;
console.log(myVar + 5);
并且CCD_ 1是CCD_。
你分配一个数字,然后再加一个数字就可以得到一个数字。
unknown
是一个接受任何值的类型,但在您断言或验证它之前,不能将其缩小到更具体的类型。这个过程不会改变值,只是typescript编译器对类型的理解。
有两种方法可以从unknown
中获得有用的东西。
您可以测试以下值:
if (typeof myVar === 'number') myVar // myVar is number here
if (typeof myVar === 'string') myVar // myVar is string here
或者,您可以使用类型断言来用as
覆盖编译器,这就是您在示例中所做的。这样做不会提供任何类型的安全性,应该避免。