基础类型(11+断言)

  • 布尔值
  • 数值
  • 字符串
  • 数组
  • 元祖
  • 枚举值
  • any
  • void
  • null和undefined
  • never
  • object
  • 类型断言

布尔值

  • 布尔值:也就是true,false
// 布尔类型
// let bool: boolean = true
let bool: boolean
bool = true

数值

// 数值
let num: number = 123
num = 0b1111011//2进制123
num = 0o173//8进制123
num = 0x7b//16进制123

字符串

  • 可以使用es6的模板字符串
// 字符串
let num:number = 132
let str: string
str = '数值是'
str = `def${num}`

数组

  • 有2种写法
// 写法1
let arr1 =  number[] =[1,2,3]
// 写法2 
let arr2 = Array<number>
// 混合类型
let arr3 = (number | string)[] = [1,2,'3']

元组类型

  • 限定了数组的排列顺序,长度等
// 元组类型
let tuple2: [string, (string|number)[]] = ['1', [1, 2, '3']]
// 必须按定义的类型排序

枚举类型

enum Roles {
  SUPER_ADMIN = 1,
  ADMIN = 8,
  USER
}
console.log(Roles)
//{1: "SUPER_ADMIN", 8: "ADMIN", 9: "USER", SUPER_ADMIN: 1,ADMIN: 8, USER: 9}

// 上述实现方式
var Roles;
(function (Roles) {
//Roles["SUPER_ADMIN"] = 1 返回 1, 则Roles[1] = SUPER_ADMIN" 得到上面注释的枚举结构
    Roles[Roles["SUPER_ADMIN"] = 1] = "SUPER_ADMIN";
    Roles[Roles["ADMIN"] = 8] = "ADMIN";
    Roles[Roles["USER"] = 9] = "USER";
})(Roles || (Roles = {}));
console.log(Roles[8]);

any

  • 尽量不要使用
  • 类型为任意
let value: any
value = 'abc'
value = 123
value = true

void

  • void:表示什么类型都不是,与any相反
  • 如果方法没有返回值,那么此方法的返回值类型就是Void类型
  • void类型的变量值是有限制的,只能是undefined和null。
  • void类型不能够赋值给其他类型。
const consoleText = (text: string): void => { //返回值为void
  console.log(text)//无返回值
}
let v: void
v = undefined
v = null
consoleText('123')

 null && undefined

let u: undefined
u = undefined

let n: null
n = null

 nerver类型

  • 表示的是那些永不存在的值的类型。

(1).总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。

(2).变量也可能是Never类型,当它们被永不为真的类型保护所约束时。

Never类型是任何类型的子类型,可以赋值给任何类型;没有类型是Never的子类型或可以赋值给Never类型(除了Never本身)。 即使 Any类型也不可以赋值给Never类型。https://www.softwhy.com/article-8878-1.html

// (1)
const errFunc = (msg: string): never => {
   throw new Error(msg) // 返回值为never
 }
 errFunc('123')
 const infiniteFunc = (): never => {
   while (true) {
     console.log(1223)
   }
}
// (2)
let neverVar = (() => infiniteFunc())() // let neverVar :nerver

num = neverVar
 console.log(num)

object

let obj = {
  name: 'chen'
}
let obj2 = obj
obj2.name = 'chen'
console.log(obj)

function getObj(obje: object): void {
  this.obj = obje
  console.log(this.obj)
}
getObj({ name: 'liu' })
console.log(obj)

类型断言

  • 类型断言可以实现对已存在数据类型的转换。
  • 尖括号<>中的数据类型为目标类型;
  • 也可以用as形式,但jsx中只能用as形式
const getLength = (target: string | number | boolean | number[]): number => {
  if ((<string>target).length || (<string>target).length === 0) {
    return (target as string).length
  } else {
    return target.toString().length
  }
}

console.log(getLength('123'))
console.log(getLength(45615125))
console.log(getLength(true))
console.log(getLength([1, 2, 3, 4, 5, 6]))
let anyValue: any = "蚂蚁部落";
let strLength: number = (<string>anyValue).length;
// 上面的代码可以将Any类型数据转换为string类型。

爬。