Any 类型 和 unknown 顶级类型
(1)没有强制限定哪种类型,随时切换类型都可以 我们可以对 any 进行任何操作,不需要检查类型。
let test:any = 123
test = '123'
test = true
test = null
(2)声明变量的时候没有指定任意类型默认为any
let test
test = '123'
test = true
test = null
(3)TypeScript 3.0中引入的 unknown 类型也被认为是 top type ,但它更安全。与 any 一样,所有类型都可以分配给unknown
unknow unknow类型比any更加严格当你要使用any 的时候可以尝试使用unknow
//unknown 定义任何类型的值
let val: unknown;
val = true; // OK
val = 22; // OK
val = "Hello"; // OK
val = []; // OK
val = {}; // OK
val = null; // OK
val = undefined; // OK
val = Symbol("Hello"); // OK
//这样写会报错unknown类型不能赋值给其他类型
let name1:unknown = '123'
let name2:string = name1
//这样就没问题 any类型是可以的
let name3:any = '1'
let name4:string = name3
//unknown可赋值对象只有unknown 和 any
let y:unknown = '1'
let z:any= '2'
z = y
// 类型为any类型在对象没有这个属性的时候还在获取是不会报错的
let obj:any = {b:1}
obj.a
// 类型为unknow 是不能调用属性和方法
let obj:unknown = {b:1,c:():number=>333}
obj.b
obj.c()
在上面,我们对比了 any 和 unknown 的区别,我们再来总结一下:
二者都是可以赋值给任意类型的, any 会绕过类型检查,直接可用,而 unkonwn 则必须要在判断完它是什么类型之后才能继续用。像 any 这个这么锋利的刀,还是能少用就少用,不然就失去了TS类型检测的作用。