TypeScript我们简称ts,它有12种基础类型:布尔型、数字、字符串、数组、元组、枚举、any、void、null、undefined、never、object。
ts的一大特点就是具有类型系统,在声明变量时指定类型。
let 变量名:boolean = true/false
//这个变量就被定义为布尔型,在后面修改这个变量的值的时候也只能是布尔值,否则编译会报错。
//声明时我们也可以不指定,系统会根据我们我们设置的值默认帮我们定义类型
如:let a=true //隐式操作:根据true,帮我们判定了布尔型 ,let a:boolean=true,不建议这样写,在声明时最好就自己定义类型
和JS一样,TS里的所有数字都是浮点数,类型是 number。 支持2、8、10、16
等各种进制。
声明:
let num:number=111 //将num声明为number类型
//NaN和Infinity也是属于number型
用string表示字符串类型,支持单引号、双引号和模板字符串
let a:string="hello world"//双引号
let b:string='hello world'//单引号
//模板字符串 同样可以使用${}获取变量
let c:string=`模拟${a}`
字符串字面量类型
字符串字面量类型用来约束取值只能是某几个字符串中的一个。
用到一个新的关键字type,定义一个自定义类型
type mytype="karen"|"halon"|"jack"
使用时:
let name1:mytype = "karen"/"halon"/"jack"//只有值为这三个得其中一个时才会编译成功
定义数组类型得方法有两种:
第一种:
let arr:number[] //将arr定义为每项都为数字的数组,如:[1,2,3]
let arr:string[] //将arr定义为每项都为字符串的数组,如:["66","a","hello"]
第二种:可以指定数组内有多种类型的值
let arr:Array
//数组的值可以是数字或字符串
这是ts新增的一个类型,写法以数组形式,它表示一个已知数量和类型的数组。
定义一个元组类型的变量:
let tuple:[number,number] //这个的意思是这个它的值只能是两项,而且两项必须是数字
定义三项:
let tuple:[number,number,string] //意思第一项为数字,第二项为数字,第三项为字符串
如:let tuple:[number,number,string]=[1,2,"hello"]
元组特点就是规定了数组长度,即每一项的类型。
枚举类型用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等。 枚举成员会被赋值为从 0 开始递增的数字,同时也会对枚举值到枚举名进行反向映射,也可以手动的指定成员的数值。
引入一个新的关键字 enum
写法:enum week(变量名) {Sun, Mon, Tue, Wed, Thu, Fri, Sat}
Sun作为第一个元素,取值时:week.Sun的值为0, 后每一个元素的值依次递增加1,
如week.Mon为1,week.Tue为2.......
我们也可以自己定义每项的值,如:
enum week {Sun=1, Mon, Tue, Wed, Thu, Fri, Sat}
那么week.Sun取到的值就为1,Mon的就是在1的基础上增加了,这时week.Mon=2,
week.Tue=3,.....
如果我们给Tue赋值为10,前面的取值不受影响,在Tue之后就是在10的基础上递增,如:
enum week(变量名) {Sun, Mon, Tue=10, Wed, Thu, Fri, Sat}
week.Sun默认取值为0,week.Mon=1,这时Tue自己设定了值,它就不再在前一项的基础上加1,而是等于10,Wed就是在10的基础上加1,依次类推。
有时需要为那些在编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用 any
类型来标记这些变量:
let msg:any="hello"
//修改msg
msg=111
msg=[1,2,3]
总而言之,就是用了any就可以接收任意类型的数据。
void,无效的,表示没有任何类型。被定义的变量只能为null或undefined
let name1:void=undefined/null
//用在函数内:
function warnUser(): void { //表示函数不用收到返回值
console.log("This is my warning message");
}
undefined和null两者各自有自己的类型undefined和null。 和 void
相似,用处不大,它们的值也只能为undefined和null。
never类型表示的是那些永不存在的值的类型。 例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型;
例如:
function error(message: string): never {
throw new Error(message);
}//函数内部抛出错误,因此不会存在返回值
object 表示非原始类型,也就是引用类型,可以使用"对象", "数组对象"为其赋值 之所以Object变量可以接收任何对象,是因为Object是所有类的父类。
在TS中,null是所有引用类型的子类,用objct定义的变量都可以赋值为null。