本书未发布

数据类型

未匹配的标注

常见数据类型

let is:boolean = true
let age:number = 10
let name:string = 'xiaoming'
let arr1:number[] = [1,2,3]
let arr2: Array<number> = [4,5,6]

对象

  • 类型声明

    // 一般不常用
    let a: object
    
    // 指定对象中拥有哪些属性
    let b: {name: string}
    
    // let b = {name: '123',age:123} 报错
  • 单个可选属性

    let b: {name: string, age?: number}
    
    b = {name: '123'}
    b = {name: '123', age:123}
  • 多个可选属性

    // [propName: string] 表示的是属性名是字符串类型的, propName 可以是其他的任意名字
    // [propName: string]: any 表示的是字符串类型的属性名, 任意类型的属性值
    let b: {name: string, [propName: string]: any}
    
    let b = {name: '12', age: 123, gender: '男'}
    // let b = {age: 123, gender: '男'} 没有 name 属性, 报错

元组

let info: [string, number] = ['xiaoming', 12]
// push 的时候, 只能 push 上面规定的两种数据类型, 比如 info.push(true) 就会报错
b.push('xiaobai')

枚举

普通枚举

enum Gender{
  GRIL,
  BOY
}

console.log(Gender[0]) // GRIL
console.log(Gender[1]) // BOY

console.log(Gender['GRIL']) // 0
console.log(Gender['BOY']) // 1

常量枚举

const enum Colors{
  RED,
  YELLOW,
  BLUE
}

let colors = [Colors.RED, Colors.YELLOW, Colors.BLUE]
console.log(colors) // [0, 1, 2]

任意类型

  • ! 表示非空断言

    let root1:any = document.getElementById('app')
    
    let root2:HTMLElement = document.getElementById('app')
    root!.style.color = 'red'

null, undefined

  • 这两种类型是其他类型的子类型

    let x:number
    x = 1
    x = undefined
    x = null
    // 上面的情况, 如果开启了严格模式, 则不能将 x 赋值给 undefined 或者 null
    
    let y: number|null|undefined
    y = 1
    y = null
    y = undefined

never

  • 表示不会出现的值
  1. 作为没有返回值的函数的类型

    function error():never {
      throw new Error('error')
    }
    
    function loop():never {
      while(true) {
        ...
      }
    }

2.

function fn(x:number|string) {
    if(typeof x === 'number'){
        console.log(x)
    } else if(typeof x === 'string') {
        console.log(x)
    } else {
        console.log(x) // 此时 x 的类型是 never
    }
}

void

  • 表示一个函数没有返回值, 没有任何类型

  • 函数没有返回值, 那么就是 void 类型

    function fn():void {
    
    }

void 和 never 的区别

  • void 可以被赋值为 null 或者 undefined, never 不能是任何类型
  • 返回 void 的函数可以正常执行, 返回 never 的函数不能正常执行

unknown 类型

  • unknown 类型的变量不能随意赋值给其他变量,如果想要赋值,需要特殊处理

  • 当变量类型不确定的时候,尽量不要使用 any, 要使用 unknown

      let a: unknown
      a = 1
      a = '2'
      a = true
      let b: string
    
      // b = a 这样写会报错, 如果想要赋值, 可以选取下面两种方式
    
      // 第一种
      if (typeof a === 'string') {
          b = a
      }
    
      // 第二种: 类型断言, 以下两种写法都可以
      b = a as string
      b = <string>a

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~