TS学习

82 阅读3分钟

typescript(静态编程语言)

  1. ts全局安装

    npm i  -g  typescript
    或者
    yarn  global add  typescript
    
    • 使用tsc -v查看版本
  2. ts运行

    • 运行tsc生成js文件
    tsc filename.ts
    node filename.js
    
  3. ts中的类型注解是一种轻量级的为函数或变量添加约束的方式

    function greeter(person: string): string {
      return "Hello" + person;
    }
    let user = [0, 1, 2];
    console.log(greeter(user));
    //ERROR:error TS2345: Argument of type 'number[]' is not assignable to parameter of type 'string'.
    //error code:5 console.log(greeter(user));
    
  4. ts配置

    • ts使用tsconfig.json文件管理工程配置

    • include读取所有可识别src目录下的文件

    • allowJS接受JavaScript作为输入

    • outDir生成的所有文件放在built目录下

    • target将js代码降级到低版本(ES5)以下

    • noImplicitReturns 会防止你忘记在函数末尾返回值

    • noFallthroughCasesInSwitch 会防止在switch代码块里的两个case之间忘记添加break语句

      {
        "compilerOptions": {
          "outDir": "./built",
          "allowJs": true,
          "target": "ES5"
        },
        "include": [
          "./src/**/*"
        ]
      }
      
  5. ts模块导出

    function foo(){
        //...
    }
    export=foo;
    
  6. ts基础类型

    • 布尔值

      • true/false

        let isNull:boolean=true;
        
    • 数字

      • 二进制/八进制/十进制/十六进制

        let binaryLiteral: number = 0b1010;
        let octalLiteral: number = 0o744;
        let decLiteral: number = 6;
        let hexLiteral: number = 0xf00d;
        
    • 字符串

      • " " / ' '

        let username: string = "li";
        
      • 还可以使用模板字符串定义多行文本和内嵌表达式

        let username: string = `li`;
        let age: number = 20;
        let person: string = `hello,my name is ${username}`;
        
    • 数组

      • 在元素类型后面接上[ ],表示由此类型元素组成的一个数组

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

        let lis: Array<number> = [1, 2, 3];
        
    • 元组Tuple

      • 允许表示一个已知元素数量类型的数组,各元素的类型不必相同

        //声明一个元组类型
        let x: [string, number];
        //初始化
        x = ["hello", 20];
        
    • 枚举

      • JavaScript标准数据类型的一个补充

        //默认从0开始编号
        enum Color {
          Red,
          Green,
          Blue,
        }
        let c: Color = Color.Green;
        //从1开始编号
        enum Color {
          Red = 1,
          Green,
          Blue,
        }
        let c: Color = Color.Green;
        
    • 任意值

      • any标记不清楚类型的变量--->直接通过编译检查

        let notSure: any = 4;
        notSure = "maybe";
        notSure = false;
        
    • 空值

      • void类型与any类型相反,表示没有任何类型

      • 当一个函数没有返回值时,返回值类型是void

        function warnUser(): void {
          console.log("warning msg");
        }
        //void类型变量只能赋予undefined和null
        
    • Null和Undefined

      • 默认情况下,nullundefined是所有类型的子类型
    • Never

      • 永不存在的值的类型(总是会抛出异常/不会有返回值的函数表达式或箭头函数表达式的返回值类型)

      • never类型是任何类型的子类型,也可以赋值给任何类型

      • never类型没有子类型,其他类型不可以赋值给never类型(除了never本身)

        // 返回never的函数必须存在无法达到的终点
        function error(message: string): never {
            throw new Error(message);
        }
        ​
        // 推断的返回值类型为never
        function fail() {
            return error("Something failed");
        }
        ​
        // 返回never的函数必须存在无法达到的终点
        function infiniteLoop(): never {
            while (true) {
            }
        }
        
    • 类型断言(不进行特殊的数据检查和解构,只在编译阶段起作用)

      • “尖括号”语法

        let someValue: any = "string";
        let strlength: number = (<string>someValue).length;
        
      • as语法

        let someValue: any = "string";
        let strlength: number = (someValue as string).length;