typescript 基础篇

(小白入坑,不喜勿喷)

任意类型 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'  //报错,类型错误

null、undefined

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


let a:null = null

let b:undefined = null

void

ts的基础类型,非严格模式下(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) {

    //函数不会走到最后,不会返回

  }

}

枚举

枚举类型是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 //报错

数组 Array|[]

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


let arr: string[]  //或者 arr:Array

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|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)

}

你可能感兴趣的:(typescript 基础篇)