TypeScript 包含的数据类型如下
0. void 类型
用于定义函数时,表示函数没有返回任何类型
function run(): void {
console.log('Run Run Run!');
}
1. Any 类型
- 声明为 any 的变量可以赋予任意类型的值。
- 任意值 是 TypeScript 针对 编程时类型不明确的变量 使用的一种数据类型
它常用于以下三种情况
1) 变量的值会动态改变时
<p>1、变量的值会动态改变时,比如来自用户的输入,任意值类型可以让这些变量跳过编译阶段的类型检查,示例代码如下:</p>
let x: any = 1; // 数字类型
x = 'I am who I am'; // 字符串类型
x = false; // 布尔类型
2) 任意值允许在编译时可选择地包含或移除类型检查
let x: any = 4;
x.ifItExists(); // 正确,ifItExists方法在运行时可能存在,但这里并不会检查
x.toFixed(); // 正确
3) 定义存储各种类型数据的数组时
let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;
2. null 类型
表示对象值缺失
在 JavaScript 中 null 表示 "什么都没有"。
null 是一个只有一个值的特殊类型。表示一个空对象引用。
用 typeof 检测 null 返回是 object
3. undefined
用于初始化变量为一个未定义的值
在 JavaScript 中, undefined 是一个没有设置值的变量。
typeof 一个没有值的变量会返回 undefined。
Null 和 Undefined 是其他任何类型(包括 void)的子类型,可以赋值给其它类型,如数字类型,此时,赋值后的类型会变成 null 或 undefined。
而在TypeScript中启用严格的空校验(--strictNullChecks)特性,就可以使得null 和 undefined 只能被赋值给 void 或本身对应的类型
// 启用 --strictNullChecks
let x: number;
x = 1; // 运行正确
x = undefined; // 运行错误
x = null; // 运行错误
如果一个类型可能出行 null 或 undefined, 可以用 | 来支持多种类型
// 启用 --strictNullChecks
let x: number | null | undefined;
x = 1; // 运行正确
x = undefined; // 运行正确
x = null; // 运行正确
4. never 类型
- 代表从不会出现的值
- never 是其它类型(包括 null 和 undefined)的子类型
- never 类型的变量只能被 never 类型所赋值
在函数中它通常表现为 抛出异常 或 无法执行到终止点(例如无限循环)
let x: never;
let y: number;
// 运行错误,数字类型不能赋值给 never 类型
x = 123;
// 运行正确,never 类型可以赋值给 never类型
x = (()=>{ throw new Error('exception')})();
// 运行正确,never 类型可以赋值给 数字类型
y = (()=>{ throw new Error('exception')})();
// 返回值为 never 的函数可以是抛出异常的情况
function error(message: string): never {
throw new Error(message);
}
// 返回值为 never 的函数可以是无法被执行到的终止点的情况
function loop(): never {
while (true) {}
}
5. boolean 布尔类型
表示逻辑值:true 和 false
const flag: boolean = false;
6. number 数值类型
- 双精度 64 位浮点值。
- 它可以用来表示 整数 和 分数
let numTest = () => {
let num: number = 0;
console.log('numInit = ' + num);
num = 1;
// 将一个字符串 赋值 给一个 number 类型的变量
// num = 'a string'; // 会 ts 报错,但是仍然可以编译运行
return num;
}
7. string 字符串类型
一个字符系列使用
单引号(')
双引号(")
来表示字符串类型。
- 反引号(`)来定义多行文本和内嵌表达式。
let name: string = "Runoob";
let years: number = 5;
let words: string = `您好,今年是 ${ name } 发布 ${ years + 1} 周年`;
let stringTest = () => {
let str: string = 'Hello, ts';
console.log('strInit = ' + str);
str = 'Hello, worktile';
return str;
}
8. array 数组类型
let arrStr: string[] = ['Hello, ', 'ts'];
console.log('arrStr = ' + arrStr);
let arrNum: Array<number> = [3, 2, 1, 0];
9. tuple 元组类型
- 属于数组的一种,可以指定数组里面每个元素的类型
let tupleArr: [string[], number] = [['Hello, ', 'ts'], 666666];
console.log('tupleArr = ' + tupleArr);
tupleArr.push(444); // 数组前面的两个元素指定了类型,不影响后面的元素
10. enum 枚举类型
定义标识符:标识状态 或 固定值
枚举:枚举状态的值,定义一个具有代表意义的单词
- 背景:
尚可接受:---- 0 代表 关,1 代表 开
不直观,可读性差:---- 0代表周一, 1代表周二, 2代表周三, 3代表周四, 4代表周五, 5代表周六, 6代表周日
- 解决:
使用相应的单词,来代表某一状态 ---- 使程序易阅读易理解
- 定义一个枚举类型:
enum 枚举类型名 {
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数]
};
实例:
/**** 1. 定义一个枚举类型 ****/
// 设计数据: pay_status 2未支付 4已支付 6交易结束
enum PayStatus {
payWait = 2,
payDone = 4,
overPay = 6
}
/**** 2. 使用枚举变量 PayStatus.payWait ****/
let phoneWaitPay: PayStatus = PayStatus.payWait; // 2
/**** 官网1. 定义一个枚举类型 ****/
// 设计数据: Color 0 red 1 blue 2 orange
enum Color {
red,
blue,
orange
} // 其实就是告诉我们,可以不指定值,默认从 0 开始
/**** 官网2. 使用枚举变量 Color.blue ****/
let bColor: Color = Color.blue; // 1
/**** 官网1. 定义一个枚举类型 ****/
// 设计数据: Color 0 red 1 blue 2 orange
enum Color {
red,
blue = 5,
orange
} // 其实就是告诉我们,可以不指定值,默认从 0 开始
// 可以从某处开始指定值,后面的值累加
/**** 官网2. 使用枚举变量 Color.blue ****/
let rColor: Color = Color.red; // 0
let bColor: Color = Color.blue; // 5
let oColor: Color = Color.orange; // 6
let enumTest = () => {
enum PayStatus {payWait = 2, payDone = 4, overPay = 6}
console.log(PayStatus.payWait); // 2
console.log(PayStatus.payDone); // 4
console.log(PayStatus.overPay); // 6
console.log(Object.prototype.toString.call(PayStatus)); // [object Object]
console.log(PayStatus);
console.log(PayStatus[2]); // 'payWait'
/**enum PayStatus {payWait = 2, payDone = 4, overPay = 6}
上面的代码转成 ES5 其实就是
var PayStatus;
(function (PayStatus) {
PayStatus[PayStatus["payWait"] = 2] = "payWait";
PayStatus[PayStatus["payDone"] = 4] = "payDone";
PayStatus[PayStatus["overPay"] = 6] = "overPay";
})(PayStatus || (PayStatus = {}));
最终创建了一个对象:
var PayStatus = {
'2': 'payWait',
'4': 'payDone',
'6': 'overPay',
payWait: 2,
payDone: 4,
overPay: 6
}
*/
enum Color {red, green, blue}
console.log(Color.red); // 0
console.log(Color.green); // 1
console.log(Color.blue); // 2
enum RGB {red, green = 5, blue}
console.log(RGB.red); // 0
console.log(RGB.green); // 5
console.log(RGB.blue); // 6 上一个 枚举属性 的值 + 1
return RGB;
}