TypeScript

112 阅读3分钟

一、简介

image.png

ts可以被编译成任何版本的js,从而解决浏览器兼容性问题

二、TS开发环境搭建

image.png

三、TS的类型声明

image.png

  • number、string、boolean

image.png

  • 字面量

image.png

  • any(显式的any)、unknown、类型断言

image.png

声明变量不指定类型时,ts解析器会自动判断变量的类型为any(隐式的any)

  • void、never

image.png

  • object、Function

image.png

  • array、tuple

image.png

  • enum、类型的别名

image.png

四、TS编译选项

tsc命令编译ts文件,tsc -w监视文件的改变并编译

image.png

image.png

image.png

image.png

image.png

{
    /*
        tsconfig.json是ts编译器的配置文件,ts编译器可以根据它的信息来对代码进行编译
        include 用来指定哪些ts文件需要被编译,不写的话默认全部ts文件都被编译
            路径: ** 表示的是任意目录   
                  *  表示的是任意文件

        exclude 用来指定不需要被编译的文件目录
     */

     "include": [
        "./src/**/*"  // **表示的是任意目录   *表示的是任意文件
      ],
      "exclude": [
        "./src/hello/**/*"
      ],
      "compilerOptions": {
        // 1.target 用来指定ts被编译为的ES版本
        // 'es3', 'es5', 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'esnext'
        "target":"es2015",

        // 2.module 用来指定要使用的模块化的规范
        "module": "es2015",

        // 3.lib 用来指定项目中要使用的库(写代码时会有库的语法提示)
        // "lib": ["ES2015","DOM"],

        // 4.outDir 用来指定编译后文件所在目录
        "outDir": "./dist",

        // 5.outFile 将代码合并为一个文件
        // "outFile": "./dist/app.js"

        // 6.allowJs 是否对js文件进行编译,默认是false
        "allowJs": false,

        // 7.checkJs 是否检查js代码是否符合语法规范,默认是false
        "checkJs": false,

        // 8.removeComments 编译时是否移除注释
        "removeComments": false,

        // 9.noEmit 是否生成编译后的文件
        "noEmit": false,

        // 10.noEmitOnError 当有错误时不生成编译后的文件
        "noEmitOnError": true,
        
        
        // 11.alwaysStrict 用来设置编译后的文件是否使用严格模式,默认false
        "alwaysStrict": false,
        // 12.noImplicitAny 不允许隐式的any类型
        "noImplicitAny": true,
        // 13.noImplicitThis 不允许不明确类型的this
        "noImplicitThis": true,
        // 14.strictNullChecks 严格的检查空值
        "strictNullChecks": true,
        // 15.所有严格检查的总开关
        "strict": true
      }

}
  • 常用

image.png

五、面向对象

image.png

1.类(class)

image.png

2.构造函数和this

定义类时把值给死了毫无意义,因此引出了构造函数

image.png

3.继承

  • 父类

image.png

  • 子类

image.png

image.png

(function(){

    // 定义一个Animal类(父类)
    class Animal{
        name: string;
        age: number;

        constructor(name: string, age: number) {
            this.name = name
            this.age = age
        }

        sayHello() {
            console.log('动物在叫~');

        }
    }
    // 定义一个表示狗的类(子类),使Dog类继承Animal类
    //  -使用继承后,子类将会拥有父类所有的方法和属性
    //  -如果希望在子类中添加父类没有的属性或方法,直接加
    //  -如果子类中添加了和父类相同的方法,则子类方法覆盖父类方法(方法重写)
    class Dog extends Animal{
        run(){
            console.log('狗狗跑起来啦');
            
        }
        sayHello(){
            console.log('汪汪汪!');
            
        }
    }


    // 定义一个表示猫的类(子类),使Cat类继承Animal类
    class Cat extends Animal{
        sayHello() {
            console.log('喵喵喵!');
        }
    }

    const dog = new Dog('凡凡',5)
    const cat = new Cat('白白',3)
    console.log(dog);
    console.log(cat);
    
    dog.sayHello()
    dog.run()
    cat.sayHello()
    
})();

4.super关键字

新增属性时常用

image.png

5.抽象类和抽象方法

image.png

  • 注意:抽象方法没有方法体

6.接口

image.png

  • 接口中的要求,类中必须要实现,类中可新增其他属性、方法

7.属性的封装

属性容易被修改错或者对计算要求比较高时,用get、set进行暴露

属性的封装,让属性更安全,不再直接修改和访问属性,而是通过get、set间接操作

image.png

image.png

注意: TS可以在属性前添加属性的修饰符

  1.public 修饰的属性可以在任意位置访问、修改(默认值) 
  2.private 私有属性,私有属性只能在类内部进行访问、修改
            - 通过在类中添加方法使得私有属性可以被外部访问
        
  3.protected 受保护的属性,只能在当前类和当前类的子类中访问、修改

优化的方案

image.png

定义类时的语法糖

image.png

8.泛型

image.png