typescript之基础类型

547 阅读3分钟

任意类型 any

ts的基本类型,可以复制为任意类型

  let a:any
  a = 'hello'  //pass
  a = 123 // pass
  a = [] // pass

字符串 string

ts的基本类型,当一个变量的类型定义为字符串的时候,他的值只能是字符串,若赋值了其他类型的值,则ts就会报错

let name: string
name = "xiaoming"   //pass
name = 123  //报错,类型错误

数字 number

ts的基本类型,当一个变量的类型定义为数字的时候,他的值只能是数字,若赋值了其他类型的值,则ts就会报错

let age: number
age = 28   //pass
age = 'hello'  //报错,类型错误

布尔 boolean

ts的基本类型,当一个变量的类型定义为布尔的时候,他的值只能是布尔,若赋值了其他类型的值,则ts就会报错

let hasMoney:boolean
hasMoney = false   //pass
hasMoney = 'has'  //报错,类型错误

枚举

枚举类型是ts的一个特殊类型,可以给一些值赋予比较容易理解的名字,像数组,也像对象

默认情况下,元素成员的值从0开始,依次累加

enum Num { frist, second, third }
console.log(Num) //{0: "frist", 1: "second", 2: "third", frist: 0, second: 1, third: 2}
console.log(Num[0]) // frist
console.log(Num.frist) // 0

也可以修改成员值

enum Num2 { frist = 1, second = 3, third = 1 }
console.log(Num2) //{1: "third", 3: "second", frist: 1, second: 3, third: 1}
console.log(Num2[1]) // third
console.log(Num2.third) // 1

成员下标也可以不是数字

enum Name { one = 'xiaomin', two = 'xiaohong', three = 'xiaogang' }
console.log(Name) //{one: "xiaomin", two: "xiaohong", three: "xiaogang"}
console.log(Name.one) //xiaomin
console.log(Name['xiaomin']) // undefined

const a: Num = Num.frist
console.log(a) //0

tuple元组

元组类型是表示一个已知长度和每一个元素类型的类型

let a = [string,number]
a = ['xiaomin',28]
a = [2,28] //报错

TyeScript 3.1 版本之后,如果访问或改变元组长度之外的元素,也会报错

console.log(a[2]) //报错
a[2] = 3 //报错

null、undefined

ts的基本类型,null和undefined类型的变量,值只能是null和undefined

let a:null = null
let b:undefined = null

void

ts的基础类型,void类型的变

非严格模式下(tsconfig.compilerOptions.strict = true),值可以是null和undefined,

严格模式下,void类型的值只能是undefined

let a:void
a=null //严格模式下会报错
a=undefined

never

never 类型表示的是那些永不存在的值的类型,一般作为绝对不会有返回值的函数的返回类型,例如函数内部报错或者函数内部无限循环等

//函数抛异常
function errortest():never = ()=>{
  throw '抛出异常,函数走不到最后,不会返回'
}

// 函数不会走到终点
function infiniteLoop(): never {
  while (true) {
    //函数不会走到最后,不会返回
  }
}

数组 Array|[]

ts的基本类型,数组的类型定义方式有两种:Array<type>|type[]

let arr: string[]   //或者 arr:Array<string>
arr = ['1', '2'] //pass
arr = [1,2] //报错,类型错误
console.log(arr);

对象 object

ts基本类型,可赋值为任意对象类型

let a:object
a = {a:1} //pass
a = {b:2} //pass
a = 'hello' //抛错

函数类型

ts允许我们给函数定义类型

可以显示的给函数指定类型

type AddFunc = (num1:number,num2:number)=>number

const addfunc:AddFunc = (num1,num2)=> num1+num2

也可以隐士的给函数指定类型

function addfunc(num1:number,num2:number):number {
  return num1 + num2
}

类型断言

有些情况下,ts无法识别当前变量的类型但是作为开发者本身是可以确定该类型的,为了解决ts无法识别而报错的问题,ts提供了类型断言的方式,类型断言有两种方式 val as string|<string>val

ps jsx语法中只支持val as string这种方式

function test(val:string|number){
 //ts无法识别val当前到底是string还是number,所以如果直接使用string或number的属性,会报错
  val.slice(0) //报错
  val.toFixed(1)// 报错
  
  //给val断言类型之后就不会报错
  (val as string).slice(0)
  // 或者 (val as number).toFixed(1)
}