23 前面跳过的unkown类型详解
学习完交叉类型、联合类型、类型断言、映射类型、索引后,我们就可以补充一个基础类型中没有讲的知识了,就是 TS 在 3.0 版本新增的顶级类型 unknown。它相对于 any 来说是安全的。关于 unknown 类型,有如下几点需要注意,我们来逐个讲解和举例学习: (1) 任何类型的值都可以赋值给 unknown 类型: let value1: unknown; value1 = "a"; value1 = 123; (2) 如果没有类型断言或基于控制流的类型细化时 unknown 不可以赋值给其它类型,此时它只能赋值给 unknown 和 any 类型: let value2: unknown; let value3: string = value2; // error 不能将类型“unknown”分配给类型“string” value1 = value2; (3) 如果没有类型断言或基于控制流的类型细化,则不能在它上面进行任何操作: let value4: unknown; value4 += 1; // error 对象的类型为 "unknown" (4) unknown 与任何其它类型组成的交叉类型,最后都等于其它类型: type type1 = unknown & string; // type1 => string type type2 = number & unknown; // type2 => number type type3 = unknown & unknown; // type3 => unknown type type4 = unknown & string[]; // type4 => string[] (5) unknown 与任何其它类型组成的联合类型,都等于 unknown 类型,但只有any例外,unknown与any组成的联合类型等于any):...