1。unknown是所有类型的父类型,其他类型都可以赋值给unknownleta:undefined=undefined;letb:null=null;letx2:unknown;x2=a;//正确的x2=b;//正确2,never是任何类型的子类型,可以赋值给任何类型leta:undefined=undefined;letb:null=null;functionerr():never{//OKthrownewError('error');}a=错误();//正确b=err();//正确3.any可以赋值给任何类型,any类型可以赋给any,除了any不能赋给never(但never可以赋给any)leta:undefined=undefined;letb:null=null;leterr:never;lety:any=4;a=y;//正确的b=y;//正确的y=a;//真y=b;//真err=y;//错误无法将类型“any”分配给类型“never”。ts(2322)4.子类型可以分配给父类型。但是父类型不能赋给子类型,必须加断言letv:void;leta:undefined=undefined;v=a;//正确a=v;//错误无法将类型“void”分配给类型“undefined”。ts(2322)a=v未定义;//正确5.未知类型可以接受任意值,但不能操作(需要评估或条件判断);any类型可以接受任意值,也可以操作(不安全,会报错)所以通常情况下,如果一个方法或者组件的属性定义了什么类型,我们传入的是什么类型就结束了,为什么要整理这张图?因为我们有时候不能非常精确地定义一个类型,我们只想传入一个子类型,让它也能识别。比如在vue中:
