一般类型声明
const a:string = 'string'const b:number = 123const c:boolean = truefunction sum(a:number,b:number):number{console.log(a+b)return a+b //声明返回值类型}sum(123,321)
使用字面量声明类型
//使用字面量声明类型let a:10a=10a=11 //报错
联合类型
|表示或
//联合类型let b : 'male'|'female' //竖线是或的意思b='male'b='female'b='hello' //报错let c:number|stringc=10c='hello'c=true//报错
& 表示且
//&表示且let k:{name:string}&{age:number}k={name:'zz',age:18}k={name:'zz',}//报错
类型别名type
用于类型非常长的时候,简化类型使用
//类型别名type myType = stringlet l : myType
any类型
any 表示任意类型,一个变量设置类型为any后相当于该变量关闭了TS的类型检测
使用TS时,不建议使用any类型
//any 表示任意类型,一个变量设置类型为any后相当于该变量关闭了TS的类型检测//使用TS时,不建议使用any类型let d:any//声明变量如果不指定类型,则TS解析器会自动判断变量的类型为any(隐式any)let s:strings=d //d的类型是any,他可以复制给任意变量
unknown类型
unknown表示未知类型的值
//unknown表示未知类型的值let e:unknowne=10e='str'e=truec=e//报错 不能将unknown类型的值赋值给其他类型//unknown实际上就是一个类型安全的any
将unknown赋值给其他值的方法
//使用类型检查if(typeof e === 'string'){c=e}
类型断言,可以用来告诉解析器变量的实际类型
s = e as strings = <string>e
void类型
void 用来表示空,以函数为例,就表示函数没有返回值
//void 用来表示空,以函数为例,就表示函数没有返回值function fn():void{return 123 //报错}
never类型
never 表示永远不会返回结果
//never 表示永远不会返回结果function fn2():never{throw new Error('报错')}
object类型
let a:objecta={}a=function(){}a=[]
{}用来指定对象中可以包含哪些属性,值必须要和{}中的属性完全一样
语法:{属性名:属性值,属性名:属性值}
在属性名后面加上?表示属性是可选的
let b:{name:string}b={} //报错b={name:'zs'}b={name:'vs',age:10} //报错let c:{name:string,age?:number}c={name:'zz'}c={name:'cc',age:10}
[propName:string]:any 表示任意类型的属性(propName可以是任意值)
let d:{name:string,[propName:string]:any}d={name:'cc',age:10,gender:'男'}
设置函数结构的类型声明
语法:(形参:类型,形参:类型,…)=>返回值类型
let e:(a:number,b:number)=>numbere=function(a:number,b:number):number{return 10}e=function(a:string,b:number):number{return 10} //报错
array类型
数组类型声明:
类型[]
Array<类型>
//string[]表示字符串数组let f: string[]f = ['a', 'b', 'c']f = [1, 2, 3, 'a'] //报错//number[],Array<number>表示字符串数组let g: number[]g = [1, 2, 3]let h: Array<number>h = [1, 2, 3]
tuple元组类型
元组,元组就是固定长度的数组
//元组,元组就是固定长度的数组let i:[string,string]i=['a','b']i=['a',123] //报错
enum枚举类
enum Gender{Male=0,Femal=1}let j:{name:string,gender:Gender}j={name:'zz',gender:Gender.Male}console.log(j.gender === Gender.Male)
