any类型
1.没有强制限定哪种类型,随时切换类型都可以 ,使用any类型
let a: any = 1;
a = '1';
a = [1]
2.声明变量的时候没有指定任意类型默认为any
let a;
a = 1
3.弊端:如果使用any 就失去了TS类型检测的作用
unknown顶级类型
TypeScript 3.0 引入了新的unknown 类型,它是 any 类型对应的安全类型。
unknown 和 any 的主要区别是 unknown 类型会更加严格:在对 unknown 类型的值执行大多数操作之前,我们必须进行某种形式的检查。而在对 any 类型的值执行操作之前,我们不必进行任何检查。
//unknown 可以定义任何类型的值
let value: unknown;
value = true;
value = 42;
value = "Hello World";
value = [];
value = {};
value = null;
value = undefined;
value = Symbol("type");
区别
1.unknow类型不能作为子类型只能作为父类型,any可以作为父类型和子类型
这样写会报错
let value: unknown = '1'
let b: string = value
这样写就不会报错
let value: string = '1'
let b: unknown = value
// 或者下面这样
let value: any = '1'
let b: string = value
unknown可赋值对象只有unknown和any
let value: unknown = '1'
let b: any = value
2.如果是any类型在对象没有这个属性的时候还在获取是不会报错的
let obj:any = {b:1}
obj.a
console.log(obj.a);
如果是unknown,是不能调用属性和方法
let obj:unknown = {a:1}
obj.a