08-TypeScirpt-unknown类型

unknown 类型

  • 1.任何类型都可以赋值给unknown 类型
  let value: unknown

  value = 1

  value = '32'
  • 2.如果没有类型断言或者基于控制流的类型细化, 那么不能将 unknown 类型赋值给其他类型
  let value1: unknown = 123
  let value2: number

  // value2 = value1 as number

  if (typeof value1 === 'number') {
    value2 = value1
  }
  • 3.如果没有类型断言或者基于控制流的类型细化, 那么不能在 unknown类型进行任何操作
  let value3: unknown = 123
  // value3++ // Object is of type 'unknown'.
  let res = (value3 as number) + 1
  • 4.只能对 unknown 类型 进行 相等或不等操作, 不能进行其他操作
  let value4: unknown = 123

  let value44: unknown = 123

  console.log(value4 === value44)
  • 5.unknown 与其他任何类型组成的交叉类型最后都是其他类型
  type MyType = number & unknown
  type MyType1 = unknown & string
  • 6.unknown 除了any以外 , 与其他任何类型组成的联合类型最后都是 unknown 类型
  type MyType2 = unknown | number
  type MyType3 = unknown | number | boolean
  • 7.never 类型是unknow类型的子类型
type MyType4 = never extends unknown ? true : false

  • 8.keyof unknown 等于 never
 type MyType5 = keyof unknown
  • 9.unknown 类型的值不能访问其属性, 方法, 创建实例
  class Person {
    name: string = 'css'
    say(): void {
      console.log(`name = ${this.name}`)
    }
  }

  let p: unknown = new Person()
  // p.say()
  console.log('p', p)
  • 10.使用映射类型时, 如果遍历的是 unknown 类型, 那么 不会映射任何属性
  type MyType6<T> = {
    [p in keyof T]: any
  }
  // 不会映射任何属性
  type MyType7 = MyType6<unknown>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容