布尔值、字符串、数字
这几个类型在Typescript中属于较简单的类型,特性上与Javascript无差别
数字类型新增支持八进制、二进制、十六进制
//布尔值
let isBool:Boolean = false;
let isBool:Boolean = true;
//字符串
let str:string = 'Hello'; //单引号
let str:string = "Hello"; //双引号
//数字
let num:number = 1; //十进制数
let hexLiteral: number = 0xf00d; //十六进制数
let binaryLiteral: number = 0b1010; //二进制
let octalLiteral: number = 0o744; //八进制
集合:数组、元组
数组:所有元素都指定为同一个类型
定义数组的两种方式,需要指定数组元素的类型
let arr:number[] = [1,2,3];
let arr:Array<number> = [1,2,3];
元组:所有元素可以指定为不同类型的
let tupleList = [string , number ]; //只能是字符串和数字类型
tupleList = ['a' , 1]; //顺序必须一致
tupleList = [1 , 'a' ]; //顺序不一致,导致程序报错
tupleList[4] = 1; //新增元素
tupleList[5] = 'a'; //新增元素
tupleList[6] = true; //报错,原因是赋值的类型不在[string , number]中
Any和Void
Any是可以指定任何数据类型,不限于某个具体的数据类型
这类型的数据在编译解析过程中,不进行数据类型检测
let anyVal:any = false;
anyVal = 1; //即使赋予了布尔值类型,仍然可以重新赋予其他类型的值
anyVal = 'string';
同时可以用于定义类似元组的数据结构,还可以使用任意类型来替换已有的数组
let anyVal:any[] = [1, 'a' , true];
anyVal[1] = true;
Void用于定义无返回值的函数和值为Undefined
function test():void {
console.log('Test function.');
}
let voidVal:void = undefined;
枚举
用于定义指定的配置项
const RespCode {
'success'=200,
'error'=>500
};
const result:RespCode = RespCode.success;
console.log(result); //200
Never
代表从不会出现的值,多数用于返回异常的函数
function testError():never {
throw new Error('It is error.');
}
Null 和 Undefined
按官方的文档:
TypeScript里,
undefined
和null
两者各自有自己的类型分别叫做undefined
和null
。 和void
相似,它们的本身的类型用处不是很大
也是Never数据类型的子类型
let num:undefined;
let num:null;
类型推论
声明变量时,在没有指定类型的情况下,根据变量初始化时定义的类型来推断当前的变量是什么类型
let a = 1; //等价于let a:Number = 1;
a = true; //报错,已经被初始化为Number类型,不能赋予其他类型的值
a = 2; //通过
let b = true; //等价于 let b:Boolean = true;
b = 'hello'; //报错,已被初始化为Boolean类型,不能赋予其他类型的值
b = false; //通过
若变量不进行初始化,则默认赋予Any类型,这种变量可以赋予任何类型的值
let a; //等价于 let a:Any;
a = true;//通过
a = 'hello';//通过
a = 3;//通过
多种类型定义
如果一个变量,可能属于多种类型,除了使用any类型定义之外,还可以采用以下方式
//假设num可能是Number类型,或者undefined类型,或者null类型
let num:Number|undefined|null;
num = 'hello'; //没有定义字符串,因此报错
num = false; //没有定义布尔值,因此报错