尚硅谷TypeScript教程(李立超老師TS新課)

//////////////////////////////////////////////////////////////////////////////////////// 定義類
class person {
? // 定義實(shí)例屬性(需要new使用)
? name: string = "小斌"
? // 定義類屬性通過static(靜態(tài)屬性) 通過person獲取
? static age: number = 18
? // readonly只讀不可以修改
? readonly sex: string = "男"
? // 靜態(tài)只讀
? static readonly sex: string = "男"
? // 定義方法
? sayHellow() {
? ? console.log("大家好")
? }
}
const per = new person()
////////////////////////////////////////////////////////////////////////////////// this指向
class dog {
? name: string
? age: number
? // 每次調(diào)用都會(huì)指向?qū)嵗?構(gòu)造函數(shù)的this)
? constructor(name: string, age: number) {
? ? this.name = name
? ? this.age = age
? ? console.log("構(gòu)造函數(shù)執(zhí)行了")
? }
? bark() {
? ? console.log(this)
? }
}
// const dog1 = new dog("小黑", 5)
// const dog2 = new dog("旺財(cái)", 4)
// dog2.bark()
// console.log(dog1, dog2)
//////////////////////////////////////////////////////////////////////////////////// class繼承
;(function () {
? // 兩個(gè)類相同 出現(xiàn)重復(fù)代碼 所以提取(就是繼承 extends) all是父類(寫上面) 其他子類 并且可以再子類追加
? class all {
? ? name: string
? ? age: number
? ? constructor(name: string, age: number) {
? ? ? this.name = name
? ? ? this.age = age
? ? }
? ? bark() {
? ? ? console.log("動(dòng)物再叫")
? ? }
? }
? // 狗類
? 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 會(huì)覆蓋 稱為(方法重寫)
? ? bark() {
? ? ? console.log("瞄")
? ? }
? }
? var DOG = new dog("旺財(cái)", 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 表示當(dāng)前類的父級(jí)
? ? ? // super.talk()
? ? ? console.log("我才是張三")
? ? }
? ? //super應(yīng)用 constructor函數(shù)因?yàn)楦割惗x 所以會(huì)重寫,語法會(huì)錯(cuò)誤,必須加上super()函數(shù),父類constructor接收name所以也要傳過去
? ? //重寫后需要兩個(gè)參數(shù)所以傳兩個(gè)
? ? 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定義類型空
? ? //抽象方法必須定義在抽象類中,子類必須對(duì)抽象方法進(jìn)行重寫
? ? 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,
? }
? //接口用來自定義一個(gè)類中可以包含哪些屬性方法,同時(shí)接口可以當(dāng)成聲明類型使用
? interface myInterface {
? ? name: string
? ? age: number
? }
? interface myInterface {
? ? gender: string
? }
? //接口可以當(dāng)成聲明類型使用 兩者合
? const jiekou: myInterface = {
? ? name: "代",
? ? age: 18,
? ? gender: "男",
? }
? // 區(qū)別:接口可以定義一個(gè)類中可以包含哪些屬性方法(屬性與方法都不能有實(shí)際的值--只是一個(gè)結(jié)構(gòu))
? interface jiekou {
? ? name: string
? ? sayLove(): void
? }
? // 使用myClass類,實(shí)現(xiàn)接口jiekou,實(shí)現(xiàn)接口就是滿足接口結(jié)構(gòu)要求
? class myClass implements jiekou {
? ? name: string
? ? constructor(name: string) {
? ? ? this.name = name
? ? }
? ? sayLove() {
? ? ? console.log(`我是${this.name}`)
? ? }
? }
? const aa = new myClass("帥哥")
? console.log(aa)
})()