TypeScript学习摘要(一)——基础类型

类型定义

ts通过冒号实现最基本的类型定义,在变量后接上冒号及定义的类型,如

// 显式类型定义,冒号后即为定义的类型
let age: number = 20
let existsFlag: boolean = true
let language: string = 'JavaScript'

没有赋值时如果变量没有设置类型,则ts会自动推断,ts自动推断后该变量类型也是固定不修改的

基础类型

布尔值 (boolean)

  • let isDone: boolean = false;
    

字符串 (string)

  • let name: string = "bob";
    

数组 (Array)

  • 定义数组时可以同时定义数组内元素的类型,有两种方式可以定义数组

    • let list: number[] = [1, 2, 3]; // 直接在元素类型后接上[]
      
    • 使用数组泛型Array<元素类型>

      let list: Array<number> = [1, 2, 3];
      

元祖 Tuple

  • 元组类型允许表示一个已知元素数量和类型的数组,和普通数组区别不大

    let x: [string, number] = ['hello', 10]
    

枚举 (enum)

  • 数字枚举

    enum Color {Red, Green, Blue} // 0 1 2
    
  • 字符串枚举

    enum Direction {
        Up = "UP",
        Down = "DOWN",
        Left = "LEFT",
        Right = "RIGHT",
    }
    

Any (any)

  • 当我们在编程阶段还不清楚某个变量的类型,或者其类型可能是动态的,如来自用户输入时;通过设置类型为any可以让该变量跳过编译阶段的类型检查

    let notSure: any = 4;
    notSure = "maybe a string instead";
    notSure = false; // okay, definitely a boolean
    

Object/object

  • object 该类型包含所有的非原始类型

    // 原始类型
    type Primitive = string 
     | boolean | number 
     | bigint | symbol 
     | null | undefined;
    
  • Object 该类型是所有 Object 类的实例的类型,因此基本包装类型String,Boolean,Number也可以赋值给该类型,该类型包含除null和undefined之外的所有类型

    const a: Object = 'str' // is Ok
    

    基础数据类型string、number、boolean同时对应了String、 Number、Boolean三种基本包装类型,而基本包装类型和Function等引用类型一样,都是Object的實例;

    基本包装类型的声明周期很短,只在代码执行的一瞬间,上面的例子相当于进行了一次基本包装类型的转换,如:

    var s1 = "text"; 
    var s2 = s1.substring(2);
    // text是基本数据类型string,按理来说不应该拥有方法,其之所以能正常调用方法是因为这行代码执行时,其内部相当于执行了
    var _s1 = new String("text"); 
    var s2 = _s1.substring(2); 
    

    因此检查器不会报错

  • 其实,默认情况下 nullundefined可以赋值给任意类型的变量,因为nullundefined是所有类型的子类型;--strictNullChecks标记可以解决此错误

Void

  • 仅包含nullundefined 可用于函数返回值

    function testFn(): void {
      console.log("something");
    }
    

Null 和 Undefined

  • null和undefined类型只能赋值他们本身,没什么用

Never

  • 表示的是那些永不存在的值的类型

  • 如一定会抛出异常或永远不能到终点的函数

    // 返回never的函数必须存在无法达到的终点
    function error(message: string): never {
        throw new Error(message);
    }
    // 返回never的函数必须存在无法达到的终点
    function infiniteLoop(): never {
        while (true) {
        }
    }
    

类型断言

  • 类型断言相当于从多种类型,如any到确定类型的转换,有尖括号和as 关键字两种写法,jsx中只能用as

    let someValue: any = "this is a string";
    let strLength: number = (<string>someValue).length;
    // or
    let strLength: number = (someValue as string).length;
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容