any/unknown/never区别

384 阅读1分钟

any VS unknow

二者都是顶级类型(top type),任何类型的值都可以赋值给顶级类型变量:

let a: any = 123// 不报错
let b: unknown = 123// 不报错

但是 unknown 比 any 的类型检查更严格,any 什么检查都不做,unknown 要求先收 窄类型

let a: any = 'aaa'
let b: unknown = 'bbb'// 不报错
let c: string = a// 不报错
let d: string = b// 报错❌ :Type 'unknown' is not assignable to type 'string'.

never 不应该出现的类型

type A = 1 | 2

function h(v: A) {
  switch(v) {
    case 1:
      break;
    case 2:
      break;
    default:
      const res = v // res 的类型就是 never
  }
}