TS(一)

112 阅读3分钟

什么是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=functionn1: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