【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;
    }

 

posted @ 2019-06-03 15:21  耶梦加德  阅读(209)  评论(0编辑  收藏  举报