TypeScript类型
一、Number数字类型:可表示整数、浮点数和正负数
二、String字符串类型
1.单引号:'abcd'
2.双引号:"abcd"
3.反引号:abcd
(es6引入新的字符串书写方式,可实现内容的分段、分行、填充变量,可以创建一个字符串模板)//键盘上的波浪线那个键英文状态下就是反引号``
三、Boolean布尔类型
两种定义方式:
1.Typescript会自动定义isTrue为boolean类型
let isTrue=true;
2.手动指定类型
let isTrue:boolean
四、Array数组类型
三种定义方式:
1.
let list1:number[]=[1,2,3,4];
let list2:Array<number>=[1,2,3,4];
let list3=[1,2,3,4];
let list4=[1,"ddd"]; //可存放number与string类型的值
let list5:any[]=[1,"abcd",true]; //可存放任何类型的值
五、tuple元组类型(固定类型、固定长度的数组)
let person1:[number,string]=[1,"abcd"];
注:
1.此类型含有个bug
person1[2]=3 //报错
person1.push(3) //不报错
2.声明元组时一定要指定数据类型
六、联合(union)与字面量(Literal)类型
1.union定义
let union:string|number //union只能被赋值为string或Literal类型
2.字面量类型(Literal)//可以确定其取值范围
let union3:0|1|2 //其赋值范围只能是0、1、2
3.联合使用两个类型
function(
n1:number|string,
n2:number|string,
resultType:"as-number"|"as-string"
){
if(resultType==="as-string"){
return n1.toString()+n2.toSting();
else{
return n1+n2;
}
}
}
七、枚举类型(Enum)
enum Color{
red,
green,
blue
}
let color=Color.blue;
console.log(color); //输出结果为2,如果给red赋值为2,输出结果就为4,也可以自定义每一个的值,值也可以是字符串
八、动态类型any与unknown
1.any(支持和兼容ts中的所有类型)//适合项目快速上线,但有安全隐患
let randomValue:any=666; //也可以等于Boolean或string或{}或。。。
randomValue()
randomValue.toUpperCase()//不报错
2.unknown(不保证类型但能保证类型安全)//更保险
let randomVaule:unknow=666
randomValue()
randomValue.toUpperCase()//报错
解决方法:
if(randomValue==="function"){
randomValue() //使用unknown时需要做一定的程度的判断或类型转换,确定变量类型以后才能正常使用
}
if(randomValue==="string"){
randomValue.toUpperCase()
}
九、void、undefined与never
1.void:指变量本身不存在,在一个函数没有任何返回的情况下,它的类型就是void,也可以指定函数类型
function printResult():void{
console.log("lalala")}
console.log(printResult()) //输出结果为undefined
2.undefined:变量没有赋值没有初始化
function printResult():undefined{
console.log("lalala");
return;}
3.never:一个函数永远执行不完
function throwError(message:string,errorCode:number):never{
throw{
message,
errorCode} //抛出异常,函数永远执行不完
}
throwError("not found","404");
function whileLoop():never{
while (true){
cosole.log("haha")
}
}
十、类型适配(类型断言) Type Assertions
举例:
let message:any;
message="abc"; //此时message的类型依然是any类型
let ddd=(<string>message).endsWith("C"); //类型适配方法一,之后可调用string的方法
let ddd2=(message as string).endsWith("C"); //类型适配方法二
注:使用Type Assertions时一定要了解当前变量的类型,并对自己的代码100%信心,否则可能会引发严重的错误!!
十一、函数类型
函数定义的两种方式:
1.
let log=function(message){
cosole.log(message);
}
let log2=(message:string)=>{ //可以给函数绑定它的类型,函数中的语句只有一句时,{}可以省略
cosole.log(message);
}
log2("hello"); //参数只能传递string类型
let log3=(message:string,code:number)=>{
cosole.log(message,code);
}
log3("hello",2); //到用这个函数时,必须传指定类型的两个参数
可选参数:
let log4=(message:string,code?:number)=>{
cosole.log(message,code);
}
log3("hello"); //code后面加入?(必须加在可选参数的末尾参数),调用时可省略此参数 ,code会被默认设定为undefined
默认参数:
let log5=(message:string,code:number=0)=>{
cosole.log(message,code);
}
log3("hello"); //再不输入code的值的情况下,默认code=0
log3("hello",2); //当输入了新数据会覆盖默认值