TS-day4

60 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

一、只读属性

一个属性不希望外界更改,只希望确定值后直接使用

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

const p = new Person("name", 21)
p.name = "name2"// 报错

二、setter/getter

私有属性前面加_,给私有属性设置setter/getter

class Person {
    private _name: string
    
    constructor(name: string) {
        this._name = name
    }
    
    running() {
        console.log("running", this._name)
    }
    
    set name(newValue: string) {
        this._name = newValue
    }
    
    get name() {
        return this._name
    }
}

const p = new Person("name")
p.name = "newName"

三、参数属性的使用(语法糖)

class Person {
    constructor(public name: string, private age: number, readonly height: number) {
    }
    
    running() {
        console.log(this.age)
    }
}

四、抽象类和方法使用

abstract class Shape {
  // getArea方法只有声明没有实现体
  // 实现让子类自己实现
  // 可以将getArea方法定义为抽象方法: 在方法的前面加abstract
  // 抽象方法必须出现在抽象类中, 类前面也需要加abstract
  abstract getArea()
}

class Rectangle extends Shape {
  constructor(public width: number, public height: number) {
    super()
  }

  getArea() {
    return this.width * this.height
  }
}

class Circle extends Shape {
  constructor(public radius: number) {
    super()
  }

  getArea() {
    return this.radius ** 2 * Math.PI
  }
}

// 通用的函数
function calcArea(shape: Shape) {
  return shape.getArea()
}

calcArea(new Rectangle(10, 20))
calcArea(new Circle(5))

五、接口中类的实现

interface IKun {
  name: string
  age: number
  slogan: string

  playBasketball: () => void
}

interface IRun {
  running: () => void
}


const ikun: IKun = {
  name: "why",
  age: 18,
  slogan: "你干嘛!",
  playBasketball: function() {}
}

// 作用: 接口被类实现
class Person implements IKun, IRun {
  name: string
  age: number
  slogan: string

  playBasketball() {
    
  }

  running() {

  }
}

const ikun2 = new Person()
const ikun3 = new Person()
const ikun4 = new Person()
console.log(ikun2.name, ikun2.age, ikun2.slogan)
ikun2.playBasketball()
ikun2.running()