在typescript中有两种顶级类型(any 与 unknown),那它们两者之间有什么区别呢?
1.任何类型都可以是any类型,any类型就相当于是免检标签,给了开发者很大的自由,typescript允许any类型的值进行任何操作,对它一路绿灯。
let score: any = 87.5;
let num = Math.round(score); // ok
2.任何类型也都可以是unknown类型,但与any完全相反,unknown类型就像是typescript给打上了一个重点检查的标签。在没有对它进行类型检查之前,ubnknow类型的变量是不能进行任何操作的。
let score: unknown = 87.5;
let num = Math.round(score); //error
那如何使unknown类型能正常使用呢?
1.很简单,就是让typscript编译器"看到"并且"相信"你的操作是合法安全的。
如下:
let score: unknown = 87.5;
if(typeof score === "number") {
let num = Math.round(score); // ok
}
2.断言
let score: unknown = 87.5;
let num = Math.round(score as number);
# 或
let num = Math.Round(<number>score);
任意类型的值都是可以复制给any与unknown二者, any 会绕过类型检查,直接可用,而 unkonwn 则必须要在判断完它是什么类型之后才能继续用,any 就是个自行车辅助轮, 习惯了 TS 的强类型检查规则应该尽快扔掉使用类型更安全的 unkown。