any类型
any类型,表示的是变量可以是任意类型,相当于关闭了ts的类型检测功能,不建议使用
如果是any类型,则允许被赋值为任意类型
let a: any = 666;
a = "Semlinker"; //通过,any类型可以被赋任意值
a = false; //通过,any类型可以被赋任意值
a = 66 //通过,any类型可以被赋任意值
a = undefined //通过,any类型可以被赋任意值
a = null //通过,any类型可以被赋任意值
a = [] //通过,any类型可以被赋任意值
a = {} //通过,any类型可以被赋任意值
变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型
let something;
something = 'seven';
something = 7;
something.setName('Tom');
等价于
let something: any;
something = 'seven';
something = 7;
something.setName('Tom');
为什么不建议使用,还有个原因是会导致any类型的值可以赋值给任意变量,且不会报错。
let a :any;
a =1; //通过,a是any类型
a ='aasd'; //通过,a是any类型
let b :number = a; //通过,a是any类型,可以被赋值给任意类型
console.log('b',b); //打印结果是b aasd,违背了b的number类型设置,但是不会报错
为了解决any 带来的问题,TypeScript 3.0 引入了 unknown 类型。
unknown与any一样,也相当于关闭了ts的类型检测功能
let a: unknown = 666;
a = "Semlinker"; //通过,unknown类型可以被赋任意值
a = false; //通过,unknown类型可以被赋任意值
a = 66 //通过,unknown类型可以被赋任意值
a = undefined //通过,any类型可以被赋任意值
a = null //通过,unknown类型可以被赋任意值
a = [] //通过,unknown类型可以被赋任意值
a = {} //通过,unknown类型可以被赋任意值
但是注意下面的代码:
let a :unknown;
a =1; //通过,unknown类型可以被赋任意值
a ='aasd'; //通过,unknown类型可以被赋任意值
let b :number = a; //报错,因为a是unknown类型,unknown类型只能赋值给any类型和unknown类型,不能赋值给其他类型。
unknown与any的最大区别是:
任何类型的值可以赋值给any,同时any类型的值也可以赋值给任何类型。unknown 任何类型的值都可以赋值给它,但它只能赋值给unknown和any类型,所以unknown实际上是一个类型安全的any
雄鹰必须比鸟飞得高,因为它的猎物就是鸟。