ES6的数据类型
基本数据类型
- Boolean
- Number
- String
- Symbol
- undefined
- null
引用数据类型
- Object
- Array
- Date
- Function
- ……
TypeScript的数据类型
TypeScript的数据类型在ES6的基础上添加了以下数据类型
- void
- any
- never
- 元组
- 枚举
- 高级类型
类型注解
相当于强类型语言中的类型声明,起到对变量的约束作用
在变量或函数后面加一个冒号,再加上类型名称
语法:(变量/函数):type
基本数据类型注解
在ts中给一个变量声明一个类型后,其值必须是该类型的值,否则在编译时会报错
let num:number;
num="hello world";
引用数据类型注解
数组
在ts中给一个变量声明为一个数组需要先指定数组中元素的类型,指定元素的数据类型后,元素的值必须是指定类型的值。
再指定元素的数据类型之后在使用[]指定该变量为一个数组
let num:number[]=[12,43];
let num:Array<number> = [12,43];
如果为数组元素指定多个类型
let num:Array<number| string> = [12,43];
表明数组的元素可以是number类型也可以是string类型,可以是纯number类型,可以是纯string类型可以是number和string的混合
函数
在给函数类型注解时,可以给函数的参数指定类型,也可以给函数的返回值指定类型
给函数的参数指定类型
let add=(x:number,y:number)=>{
}
给函数的返回值指定类型时与之前的写法不同
let add:(x:number,y:number)=>number
add=(a,b)=>a+b
对象
let obj:Object={};
这种方式声明类型只能声明变量的类型
let obj:{name:string,age:number}={name:"agf",age:12}
这种方式不仅可以声明变量的类型还可以声明对象属性的类型
void
表示没有任何返回值的类型,比如没有返回值的函数,这里的返回值是指使用return返回
let an = ()=>{}
any
any类型表示可以是任何类型,可以给变量赋值任何值
let x;//默认为any类型
如果将变量定义为any类型,与js没有区别,也就没有必要使用ts因此不推荐使用
never
表示永远不会有返回值的类型
一种情况是一个函数抛出抛出一个异常,函数永远不会有返回值
let error =()=>{
throw new Error("error")
}
另一种是死循环,函数永远不会执行完毕,永远不会有返回值
let endless=()=>{
while(true){}
}
never与void的区别
void是指函数执行完毕后没有返回值并且是指函数不使用return返回,函数在没有使用return返回时,可以返回undefined的。
never是指在函数能够执行的情况下函数没有执行完毕或者函数不能执行。
枚举类型
一组具有名字的常量集合
//声明枚举
//数字枚举
enum Role{
Reporter,
Developer,
Owner
}
//获取枚举成员
console.log(Role.Reporter) //0
//自定义枚举成员的值
enum Ane{
Reporter=1,
Developer,
Owner
}
//后面的枚举成员的值会依次增加
console.log(Ane.Developer)//2
//字符串枚举
enum Message{
Success="成功",
Fail="失败"
}
//异构枚举
enum Answer{
N,
Y="yes"
}
枚举成员的值是只读类型,定义之后不能修改
枚举成员的类型
- 常量枚举成员
常量枚举成员的值,在编译阶段被计算出来 - computed
需要被计算的枚举成员,通常是函数表达式,不会再编译阶段被计算,会被保留到执行阶段,computed的枚举成员必须有初始值否则会报错。
常量枚举
用const声明的枚举会在编译阶段被移除
不需要一个对象而需要一个对象的值的时候就可以使用常量枚举,减少编译阶段的代码
const enume Month{
Jan,
Feb
}
枚举类型
在某些情况下,枚举和枚举成员都可以作为一种单独的类型存在。
第一种情况,枚举成员没有初始值
enum E {a,b}
let e : E = 3
第二种情况,所有的成员都是数字枚举
enum F {a=0,b=1}
let f : F = 3 // 枚举类型变量的值可以超出枚举成员的定义
第三种情况,所有成员都是字符串枚举
注意点:
- 两种不同的枚举类型不可以比较
- 字符串枚举类型变量的值只能是枚举成员的类型
enum G {a="apple", b="banana"}
let g1 : G = G.a //可以是 G.a 或 G.b
let g2 : G.a = G.a //只能是G.a
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。