任意类型

Any 类型 和 unknown 顶级类型

没有强制限定哪种类型,随时切换类型都可以 我们可以对 any 进行任何操作,不需要检查类型

let a: any = 1
a = 'a'
a = true

声明变量的时候没有指定任意类型默认为any

let a
a = 'a'
a = true

弊端

如果使用any 就失去了TS类型检测的作用

TypeScript 3.0中引入的 unknown 类型也被认为是 top type ,但它更安全。与 any 一样,所有类型都可以分配给unknown

unknown类型比any更加严格当你要使用any的时候可以尝试使用unknown

// unknown 可以定义任何类型的值
let u: unknown

u = true // ok
u = 1 // ok
u = 'u' // ok
u = [] // ok
u = {} // ok
u = null // ok
u = undefined // ok
u = Symbol('u') // ok

// unknown类型不能赋值给其他类型
let u: unknown = 'u'
let s: string = u // error

// any类型是可以的
let a: any = 'a'
let s: string = a

// unknown可赋值对象只有unknown 和 any
let u: unknown = 'u'
let a: any = 'a'

a = u

区别

// 如果是any类型在对象没有这个属性的时候还在获取是不会报错的
const o: any = {a: 1}
o.a

// 如果是unknown 是不能调用属性和方法
const o: unknown = {a: a, b: (): number => 1}
o.a
o.b
贡献者: mankueng