欢迎光临散文网 会员登陆 & 注册

尚硅谷TypeScript教程(李立超老师TS新课)

2023-07-01 11:58 作者:小代工作区  | 我要投稿

//////////////////////////////////////////////////////////////////////////////////////// 定义类

class person {

  // 定义实例属性(需要new使用)

  name: string = "小斌"

  // 定义类属性通过static(静态属性) 通过person获取

  static age: number = 18

  // readonly只读不可以修改

  readonly sex: string = "男"

  // 静态只读

  static readonly sex: string = "男"


  // 定义方法

  sayHellow() {

    console.log("大家好")

  }

}

const per = new person()


////////////////////////////////////////////////////////////////////////////////// this指向

class dog {

  name: string

  age: number

  // 每次调用都会指向实例(构造函数的this)

  constructor(name: string, age: number) {

    this.name = name

    this.age = age

    console.log("构造函数执行了")

  }

  bark() {

    console.log(this)

  }

}

// const dog1 = new dog("小黑", 5)

// const dog2 = new dog("旺财", 4)

// dog2.bark()

// console.log(dog1, dog2)


//////////////////////////////////////////////////////////////////////////////////// class继承

;(function () {

  // 两个类相同 出现重复代码 所以提取(就是继承 extends) all是父类(写上面) 其他子类 并且可以再子类追加

  class all {

    name: string

    age: number

    constructor(name: string, age: number) {

      this.name = name

      this.age = age

    }

    bark() {

      console.log("动物再叫")

    }

  }

  // 狗类

  class dog extends all {

    // name: string

    // age: number

    // constructor(name: string, age: number) {

    //   this.name = name

    //   this.age = age

    // }

    // bark() {

    //   console.log("汪汪汪")

    // }

  }

  //猫类

  class cat extends all {

    // name: string

    // age: number

    // constructor(name: string, age: number) {

    //   this.name = name

    //   this.age = age

    // }

    // bark() {

    //   console.log("瞄")

    // }

    //父也有bark 子也定义bark 会覆盖 称为(方法重写)

    bark() {

      console.log("瞄")

    }

  }

  var DOG = new dog("旺财", 7)

  var CAT = new cat("小米", 2)

  // console.log(DOG, CAT)

  // DOG.bark()

  // CAT.bark()

})()


///////////////////////////////////////////////////////////////超类(也就是父类)super

;(function () {

  // 人类

  class people {

    name: string

    constructor(name: string) {

      this.name = name

    }

    talk() {

      console.log(`我是${this.name}`)

    }

  }

  // 张三类

  class zhangsan extends people {

    // 方法重写

    talk() {

      // super 表示当前类的父级

      // super.talk()

      console.log("我才是张三")

    }

    //super应用 constructor函数因为父类定义 所以会重写,语法会错误,必须加上super()函数,父类constructor接收name所以也要传过去

    //重写后需要两个参数所以传两个

    age: number

    constructor(name: string, age: number) {

      super(name)

      this.age = age

    }

  }

  // 未重写constructor

  // const zs = new zhangsan("张三")

  // 重写constructor

  const zs = new zhangsan("张三", 100)

  // console.log(zs)

  // zs.talk()

})()


////////////////////////////////////////////////////////////////////////////////////////////////抽象类abstract

;(function () {

  // 汽车类(父)

  //抽象类就是专门用来继承的 不能new,并且可以定义抽象方法 如didi()

  abstract class car {

    name: string

    constructor(name: string) {

      this.name = name

    }

    // 抽象方法 没有方法体 void定义类型空

    //抽象方法必须定义在抽象类中,子类必须对抽象方法进行重写

    abstract didi(): void

  }

  // 凯迪拉克(子)

  class cadillac extends car {

    // 抽象方法重写

    didi() {

      console.log(`我想买${this.name}`)

    }

  }


  const cd = new cadillac("凯迪拉克")

  console.log(cd)

  cd.didi()

  //使用父类(可以)---但是不想使用(只用来继承)用抽象类 abstract

  // const che = new car("兰博")  //无法使用抽像类

})()


//////////////////////////////////////////////////////////////////////////接口 interface

;(function () {

  // 自定义声明类型

  type myType = {

    name: string

    age: number

  }

  const obj: myType = {

    name: "代",

    age: 18,

  }


  //接口用来自定义一个类中可以包含哪些属性方法,同时接口可以当成声明类型使用

  interface myInterface {

    name: string

    age: number

  }

  interface myInterface {

    gender: string

  }

  //接口可以当成声明类型使用 两者合

  const jiekou: myInterface = {

    name: "代",

    age: 18,

    gender: "男",

  }

  // 区别:接口可以定义一个类中可以包含哪些属性方法(属性与方法都不能有实际的值--只是一个结构)

  interface jiekou {

    name: string

    sayLove(): void

  }

  // 使用myClass类,实现接口jiekou,实现接口就是满足接口结构要求

  class myClass implements jiekou {

    name: string

    constructor(name: string) {

      this.name = name

    }

    sayLove() {

      console.log(`我是${this.name}`)

    }

  }

  const aa = new myClass("帅哥")

  console.log(aa)

})()


尚硅谷TypeScript教程(李立超老师TS新课)的评论 (共 条)

分享到微博请遵守国家法律