(小白入坑,不喜勿喷)
任意类型 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
|
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)
}