本书未发布

class

未匹配的标注

类的定义

class Person {
    // 实例属性
    name: string = 'xiaoming'

    // 静态属性 (类属性)
    static age: number = 12

    // 只读属性, 不能修改
    readonly gender: string = '男'

    // 静态只读属性, 不能修改
    static readonly money: number = 0

    // 定义实例方法
    say() {
        console.log('haha')
    }

    // 类方法
    static walk() {
        console.log('walk')
    }
}

const p1 = new Person()
console.log(p1.name)
console.log(Person.age)

类的继承

  • 要用 extends 来继承类, 同时, 如果想要重写父类的构造函数, 那么就需要先调用父类的构造函数

      // 调用父类中的构造函数
      super()
    
      // 调用父类中的其他方法
      super().方法名()

抽象类

  • abstract 来定义

  • 不能实例化对象, 只能用来被继承

  • 抽象类中可以定义抽象方法

    abstract class Animal {
      name: string
    
      constructor(name: string) {
          this.name = name
      }
    
      // 抽象方法, 没有方法体
      // 抽象方法只能定义在抽象类中, 子类必须要重写抽象方法
      abstract say(): void
    }

接口

  • interface 来定义, 实现接口的时候使用 implements

  • 接口是用来定义一个类的结构, 即用来定义一个类中应该包含哪些属性和方法

  • 同时接口也可以当成类型声明去使用

  • 可以在一个文件中定义多个相同名字的接口, 最后实现的时候, 是将所有接口中的属性和方法加到一块

      interface myInterface {
          name: string
          age: string
          // 可选属性
          gender?: string
      }
    
      let p: myInterface = {
          name: 'xiaoming',
          age: '12'
      }
  • 接口实现

      interface Radio {
          switchRadio(trigger: boolean): void
      }
    
      class Car implements Raido {
          switchRadio(trigger: boolean) {
    
          }
      }

属性

  • 属性修饰符有 public, private, protected

    • private 表示只能在类中访问
    • protected 表示可以在父类和子类中访问
  • 属性存取器: gettersetter, 可以用来设置和获取私有属性, ts 中也可以用下面的操作来设置和获取属性

      class Person {
          private gender: string
    
          get gender() {
              return this.gender
          }
    
          set gender(gender: string) {
              this.gender = gender
          }
      }
    
      const p1 = new Person()
      // 设置
      p1.gender = '男'
      // 获取
      console.log(p1.gender)

命名空间

namespace a {
    function replaceClass(constructor: Function) {
        // 下面的属性, 可以多, 但是不可以少
        return class {
            name: string,
            eat: Function,
            age: number,
            constructor() {}
        }
    }

    @replaceClass
    class Person {
        name: string,
        eat: Function,
        constructor() {}
    }

    let p: Person = new Person()
    console.log(p.name)
}

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~