前言
不同于JavaScript弱类型、无约束的语言风格,TypeScript需要对数据进行类型注解,更加严谨和规范,ts中有以下几种基本数据类型可供选择:
- 布尔值(Boolean)
- 数值(Number)
- 字符串(String)
- 数组(Array)
- 元组(Tuple)
- 枚举(Enum)
- 任意值(Any)
- 空值(Void)
- Never
- Null和Undefined
- 对象(Object)
布尔值(Boolean)
在 TypeScript 中,使用 boolean
定义布尔值类型:
let flag: boolean = true;
数值(Number)
使用number
定义数值类型:
let num: number = 12;
// ES6中的二进制表示法
let binaryNum: number = 0b1100;
// ES6中的八进制表示法
let octalNum: number = 130;
// 16进制字面量表示法
let hexNum: number = 0x12d;
// 定义NaN
let nonNum: number = NaN;
字符串(String)
使用string
定义字符串类型:
let name: string = 'Lily';
// 使用模板字符串
let job: string = `programmer`;
let description = '${name} is a ${job}';
数组(Array)
数组有两种声明类型的方式,第一种是在类型后面加上方括号[]
,表示该数组由此种类型的元素构成。
let dataArr: number[] = [12, 67, 3, 7, 199];
第二种是使用数组泛型Array<元素类型>
来声明数组的类型。
let dataArr: Array<number> = [99, 65, 2, 8, 11];
元组(Tuple)
元组是数组的一种,能够存储不同类型的元素。
let tupleArr: [number, string] = [22, 'tree'];
需要注意的是,元组中元素的类型、位置及个数应当与声明的类型、位置及个数保持一致。
枚举(Enum)
枚举可用于表示某些特定场景下数据的取值类型,例如颜色包括"红橙黄绿青蓝紫"等,五行包括"金木水火土"五种物质。 枚举类型的定义方式如下:
enum 枚举名 {
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数]
};
用"五行"举例:
enum TheFiveElements { metal, wood, water, fire, earth }
let f: TheFiveElements = TheFiveElements.wood;
console.log(f) // 输出为1,如果标识符未赋值,则默认是从零开始的下标号
enum TheFiveElements { metal, wood = 2, water, fire, earth }
let f1: TheFiveElements = TheFiveElements.wood;
console.log(f1) // 输出为2,如果标识符已赋值,则为指定的值
let f2: TheFiveElements = TheFiveElements.water;
console.log(f2) // 输出为3,未赋值,则从已赋值的标号处递增
任意值(Any)
在开发过程中,有时候会碰到类型并不清楚的变量,此时可以将变量设置为any类型,any类型能够直接通过类型检查器的检查。any类型可用于声明DOM节点。
let value: any = 'Tom';
value = 99;
let container:any = document.getElementById('container');
空值(Void)
void表示没有任何类型,可以理解为any类型的相反类型。void一般用于声明没有返回值的函数的返回值类型。
function sayHello():void {
console.log('sayHello');
}
Null和Undefined
在 TypeScript 中,可以使用undefined和null分别定义两个原始数据类型:
let u: undefined = undefined;
let n: null = null;
let str: string;
console.log(str); // 报错 输出:undefined
let str: undefined;
console.log(str); // 正确 输出:undefined
针对有多种类型可能性的变量,可以使用联合类型进行声明,例如:
let str: string | undefined;
str = 'hi!'
Never
never
类型是任何类型的子类型,能够赋值给任何类型,而never
类型没有子类型,因此声明为 never
的变量只能被 never 类型所赋值。never
类型可用于声明总会抛出异常或永远没有返回值的函数表达式以及箭头函数表达式的返回值类型。
let error: never;
error = (() => {
throw new Error('ERROR');
})()
对象(Object)
Object类型表示除number
,string
,boolean
,symbol
,null
或undefined
之外的类型。
let person: object = {
name: 'Lily',
age: 16
}