const a:unknown=newString("a");let b:any="b";let c ="c";
b = a;// 不能将类型“unknown”分配给类型“number”。ts(2322)
c = a;// 对象的类型为 "unknown"。ts(2571)
a.toString();const d:unknown="d";// 使用类型断言(d asstring).toLowerCase();// 使用类型守卫if(typeof d ==="string"){
d.toLowerCase();}// 注意 any 也可以使用断言和守卫,但是 unknown 本身就存在很强的防御性,因此使用 unknown 替代 any
never: 永不存在的值的类型
除了本身类型之外不允许任何类型的变量赋值,any 也不行
常用于构造条件类型来组合出更灵活的类型定义
// 用于抛出异常,永远不存在返回functiononError(message:string):never{thrownewError(message);}// 死循环,永远不存在返回functiononLoop():never{while(true){}}// 如果 T 是 U 的子集,则返回 never,否则返回 TtypeExclude<T,U>=TextendsU?never:T;// 1 是 1 | 4 | 5 的子集,则返回 never// 2 不是,返回 2// 3 不是,返回 3// 则 type A = never | 2 | 3// 即 type A = 2 | 3typeA= Exclude<1|2|3,1|4|5>;