• TypeScript 初学总结


    1、声明:

    let : 区块定义,解决var 声明中带来的作用域混淆问题

    const : 声明常量,不可改变

    2、类型: 

    数字: number

    布尔: boolean

    字符串: string

    数组: array

    元组: tupple  是一个特殊的数组,是固定长度,固定类型的数组,声明元组的时候一定要指明类型,(bug: 使用push() 可以突破元组的界限,无限给元组添加长度

    联合union :表示取值可以为多种类型中的一种。

         例:let myFoavorite:string | number;

    字面量:literal 

    枚举: enum 

    任意: any

    unknow: (不保证类型,但能保证类型安全)

    viod: 函数在没有任何返回的情况,就是一个viod类型

    undefined : 未经初始化的值

    never : 大部分用来处理异常

    类型适配: <> 或者 as 

    3、函数类型

    函数定义:

    function add(arg1: number, arg2: number): number { return x + y; }

    const add = (arg1: number, arg2: number): number => { return x + y; }

    函数定义可选参数:可选参数只需在参数名后跟随一个?即可

    function add(arg1: number, arg2?: number): number { return x + y; }

    const add = (arg1: number, arg2?: number): number => { return x + y; }

    注意: 可选参数必须放在必选参数后面

    默认参数:

    const counter = (step = 1) => { count += step; };

    剩余参数

    const handleData = (arg1: number, ...args:number[]) => { console.log(args); };

    handleData(1, 2, 3, 4, 5); // [ 2, 3, 4, 5 ]

    4、对象类型 

    (以{}包括起来,用键值对的形式显示)

    const person= {

       name: "张三",

      lastName: "刘",

       age: 18

    }

    • ts中调用没有定义的属性,会报错。js不会
    • ts对象中的属性会自动匹配类型。不可改变  
    5、interface 接口类型  使用接口(Interfaces)来定义对象的类型。

     例: 

    1. interface Person {
    2. name: string,
    3. age: number,
    4. gender?: string | number // 用 ? 表示可有可无的属性
    5. }

       TS 接口 interface | 代码干燥计划

    6、Class 类

       定义: class 关键字定义类 。 constructor 定义构造函数

       继承:

    • 使用  extends  关键字实现继承
    • 使用super 关键字来调用父类的构造函数和方法

       例: 

    1. class Animal {
    2. public name: string;
    3. constructor(name: string) {
    4. this.name = name;
    5. }
    6. sayHi(): string {
    7. return `My name is ${this.name}`;
    8. }
    9. }
    10. class Cat extends Animal {
    11. constructor(name) {
    12. super(name); // 调用父类的 constructor(name)
    13. console.log(this.name);
    14. }
    15. sayHi(): string { // 将子类共用的方法抽象出来放在父类中,自己特殊逻辑放在子类中重写父类的逻辑
    16. return 'Meow, ' + super.sayHi(); // 调用父类的 sayHi()
    17. }
    18. }
    19. let c = new Cat('Tom'); // Tom
    20. console.log(c.sayHi()); // Meow, My name is Tom

    重写(override) vs   重载 (overload)

       重写:是指子类重写继承自父类的方法

       重载: 是指为同一个函数提供多个类型定义

    继承 VS 多态

        继承: 子类继承父类,子类除了拥有父类的所有特性外,还有一些具体的特性

        多态: 由继承而产生了相关的不同的类,对同一个方法可以有不同的行为

      类的修饰符(默认public)

            public : 公有

            protected : 受保护的, 自己和自己的子类可以访问,其它类不可访问

            private :  私有

            当构造函数 使用  protected 时,该类只允许被继承

            当构造函数 使用 private 时,该类不允许被继承或者实例化。

     readonly 

             readonly 修饰的变量只能在属性声明时或 构造函数 中初始化

    存取器

             我们可以通过 gettersetter来改变一个类中属性的读取和赋值行为

             例:

    1. class Person {
    2. name: string
    3. constructor(name: string) {
    4. this.name = name
    5. }
    6. get getName() { // 读取
    7. return this.name
    8. }
    9. set setName(val: string) { // 赋值
    10. this.name = val.toUpperCase()
    11. }
    12. }
    13. let p1 = new Person('nihao')
    14. console.log(p1.getName)
    15. p1.setName = 'hello'
    16. console.log(p1.name)

    静态属性和静态方法 static 

            不需要初始化,而是使用类直接调用

    例:

    1. class Father {
    2. public name: string
    3. constructor(name: string) {
    4. this.name = name
    5. }
    6. public static className: string = 'Father'
    7. static getClassName(): string {
    8. return Father.className
    9. }
    10. }
    11. console.log(Father.className)
    12. console.log(Father.getClassName())

    抽象类 (无法创建实例,只能被继承。使用 abstract  标记)

    例: 

        (注: 在变量名后加 ! 表示: 该变量可以为null 或者 undefined)

    1. abstract class Animal {
    2. name!: string
    3. abstact speak(): void
    4. }
    5. class Cat extends Animal {
    6. speak(){
    7. console.log(123)
    8. }
    9. }
    10. let animal = new Animal() // ERROR 无法创建抽象类的实例
    11. let cat = new Cat()
    12. cat.speak() // 123

    抽象方法

    •     不能在抽象类中实现,只能在抽象类的具体子类中实现,而且必须实现
    •     只能出现在抽象类中
    •     子类可以对抽象类进行不同的实现

        例:

    1. abstract class Animal {
    2. name: string
    3. abstract speak(): void = () => {} // ERROR 方法speak 不能具有实现,因为它被标记为 抽象
    4. }
    5. class Cat extends Animal {
    6. speak () { //在这里实现抽象方法
    7. console.log(123456)
    8. }
    9. }
    10. class Dog extends Animal {
    11. speak () {
    12. console.log("88995")
    13. }
    14. }
    7、 模块 

    模块 | 深入理解 TypeScript

     8、泛型

          一文读懂 TypeScript 泛型及应用( 7.8K字) - 掘金

  • 相关阅读:
    计算某个整数含有几位数
    Xtrabackup将本地数据迁移上云
    MySQL-优化LIMIT和OFFSET子句
    golang超时控制(转)
    Bandzip下载(好用的解压缩工具)
    2-10.基金管理人的内部控制
    Linux软件管理命令- wget yum rpm
    C++-Cmake指令:set
    同轴电缆技术参数(一)
    【机器学习】决策树系统 | 决策树基本原理,最优划分属性,剪枝处理
  • 原文地址:https://blog.csdn.net/weixin_41807530/article/details/133747860