【typeScript 02】包含的数据类型
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; }