any => unknown => never
- any: 没有类型校验,当开发者不希望 ts在编译时做 typechecking, 而且希望 ts 相信这行代码是 ok的
- known: known 是 is safer than any. 当值是 known, 不允许对它做任何操作,看代码:
function f1(a: any) {
a.b(); // ok 👌 , any 允许这么做,就算 a 可能只是一个数字,它并没有 b 方法
}
function f2(a: unknown) {
a.b(); // 报错 ❌,使用 unknow的方法,必须先提前校验它,如何校验?
}
如何校验? 可以使用 typeof 或者 比较之后,才可以使用,才不会报错!!
if (maybe === true) {
// TypeScript knows that maybe is a boolean now
const aBoolean: boolean = maybe;
// So, it cannot be a string
const aString: string = maybe;
Type 'boolean' is not assignable to type 'string'.
}
if (typeof maybe === "string") {