什么是typescript
- 以JavaScript为基础构建的语言
- 一个Javascript的超集合
- 可以在任何支持JavaScript的平台执行
- typescript 扩展了JavaScript并添加了类型
- ts不能被js解析器直接执行,需要转换为js再执行
ts的类型声明
类型声明是TS 非常重要的一个特点。可以通过类型声明指定TS中变量的类型。
指定类型后,当变量赋值时,TS编译器会自动检查值是否符合类型声明,符合就会赋值,否则会显示代码报错(但实际还是能运行,因为ts中支持js的写法)
声明一个变量a,同时指定它的类型为number,声明后啊只能赋值数字类型
let a:number =344
console.log(a)
在参数中设置类型
//传递的两个参数都需为数字类型
function sum (a:number,b:number){
return a+b
}
sum(1,1)
//设置返回值的类型为number
function sum2 (a:number,b:number):number{
return a+b
}
除了声明基础类型外,还可以直接使用字面量进行类型的声明(有点和常量类似)
let a:10
//a=20 会报错
可以使用|来连接多个类型 (联合类型)
//c只能是'girl' 或者 'boy'
let a : 'girl' | 'boy'
a='girl'
//b可以为number类型或者string类型
let b : number | string
b='girl'
any 表示任意类型,可以任意赋值,相当于关闭了这个变量的类型检测。
声明变量不指定类型,会判断变量为any(不过为隐式的any)
any 可以赋值给任意类型
let a:any='1223'
unknow 表示未知类型。和any的区别unknown类型的值赋值给其他非unknown类型的值会报错,any则不会
let a:number=10
let e:unknown='11'
a = e //会报错
类型断言,可以用来告诉解析器变量的实际类型。语法 变量 as 变量 或者<类型>变量
let e:unknown='11'
a = e as number
a = <number>e
void 表示空,用函数为例,表示没有返回值
function fn():void{
}
never 表示永远不会返回结果。一般用来返回报错
function fn2():never{
throw new Error('错了!!')
}
object表示一个js对象。{} 用来指定包含那些属性
语法:{属性名:属性值,属性名:属性值}
属性名后面加一个?表示属性是可选的{属性名?:属性值}
let obj :object
let obj1:{name:string}
let obj2:{name:string,age?:number}
obj1={name:'yao'}
属性名为字符串的任意类型[xx:string]:any
属性名为字符串的字符串类型[xx:string]:string
// 代码含义要求属性值里面必须含有name属性名的字符串
let obj3:{name:string,[propName:string]:any}
obj={name:'yy',a:11,b:'66'}
设置函数结构的类型声明
语法:(形参:类型,形参:类型,...)=>返回值
//函数d有两个变量都是number类型,且函数返回值为number类型
let d:(a:number,b:number)=>number
d=function(n1:numbernumber,n2:number):number{
return n1+n2
}
array 的了类型声明 类型[],Array<类型>
//string[] 、Array<string>表示字符串类型数组,也可以是其他类型
let a:string[]
let b:Array<string>
tuple 元组,元组就是固定长度的数组
语法:[类型,类型,类型,...]
let a:[string,string]
a=['11','22']
let b:[string,number]
b=['11',22]
enum 枚举
//优点代码可读性
enum Gender{
male=0,
female=1
}
let q:{name:string,gender:Gender}
q={
name:'张三',
gender:Gender.male
}
console.log(q.gender===Gender.male)
&表示同时
let q:{name:string}&{age:number}
q={name:'李四',age:16}
类型别名
type myType =1|2|3|4|
let q:myType
let w:myType
q=2
w=4