學(xué)習(xí) 之 TypeScript -- 基礎(chǔ)知識 【2】

學(xué)習(xí) 之 TypeScript -- 基礎(chǔ)知識

1促绵、函數(shù): 函數(shù)定義

1.1、無返回值
function run(): void {
   console.log('沒有返回值請使用void類型')
}
1.2嘴纺、返回值類型
// 返回字符串類型
function run2(): string {
    return '返回字符串類型'
}

// 返回數(shù)字類型
function run3(): number {
    return 1234
}

// 返回任意類型
function run4(): any {
    return 123
}
1.3败晴、函數(shù)傳參
function getInfo(name: string, age: number): string {
    return `${name}______${age}`
}
1.4、可選參數(shù)(可選參數(shù)必須現(xiàn)在最后面T钥省<饫ぁ!)
function getInfo2(name: string, age?: number): string {
    if (age) {
            return `${name}______${age}`
    } else {
            return `${name}_____年齡保密`
    }
}
1.5闲擦、默認參數(shù)
function getInfo3(name: string, age: number = 20): string {
    if (age) {
            return `${name}______${age}`
    } else {
            return `${name}_____年齡保密`
    }
}
1.6慢味、剩余參數(shù)(三點運算)
function sum(...result: number[]): number {

    var sum = 0;
    result.map(function (item, index) {
            sum += item;
    });

    return sum
}
console.log(sum(12, 3, 4, 5))
1.8、函數(shù)重載
//(Java中重載墅冷,指的是兩個或者兩個以上的同名函數(shù)纯路,但他們的參數(shù)不一樣,這時會出現(xiàn)函數(shù)重載的情況)
//(TyprScript中重載俺榆,指的是通過一個函數(shù)提供多個函數(shù)類型定義,來試下多種功能的目的)
//ts為了兼容es5 或者 es6重載的寫法和java是有區(qū)別的

function getInfo(name: string): string;
function getInfo(age: number): string;
function getInfo(str: any): any {
        if (str === 'string') {
                return '我的名字:' + str
        } else {
                return '我的年齡:' + str
        }
}
console.log(getInfo('張三')) // 正確寫法
console.log(getInfo(20))  // 正確寫法
console.log(getInfo(true)) //錯誤寫法

2装哆、類

class Person {

    public name: string;    // 屬性
    constructor(n: string) { // 構(gòu)造函數(shù) 實例話會觸發(fā)
            this.name = n;
   }

    getName(): string {
            return this.name;
    }

    setName(name: string): void {
            this.name = name;
    }
}

let p = new Person('張三');
p.setName('李四')
console.log(p.getName())

3罐脊、繼承

class Person {

    public name: string;    // 屬性
    constructor(n: string) { // 構(gòu)造函數(shù) 實例話會觸發(fā)
            this.name = n;
    }

    getName(): string {
            return this.name;
    }

    setName(name: string): void {
            this.name = name;
    }

    run(str: string): string {
            return str;
    }
}

class Web extends Person {
    constructor(name: string) {
            super(name) // 繼承 -- 初始化父類構(gòu)造函數(shù)
    }

    run(str: string): string {
            return str + " -- 子類方法";
    }
}
let p = new Web('李五');
// 父類和子類有同樣方式時定嗓,實際調(diào)用的是子類方法(因為先從子類找方法,如果子類方法沒有萍桌,再往父類找)
console.log(p.run('李六'))

4宵溅、類的修飾符(屬性不加修飾符,默認為公有:public)

// public 公有: 在類里上炎、子類恃逻、類外都可以訪問
// protected 類保護:  在類里、子類可以訪問藕施,類外不可訪問
// private 私有:在當(dāng)前類里可以訪問寇损,在子類、類外不可訪問

// public(公有) 范例:
  class Person {

          public name: string;    // 屬性
          constructor(n: string) { // 構(gòu)造函數(shù) 實例話會觸發(fā)
                  this.name = n;
         }

          getName(): string {
                  console.log(this.name + '---- public范例 -- 類內(nèi)訪問')
                 return this.name;
          }

          setName(name: string): void {
                  this.name = name;
          }

          run(str: string): string {
                  return str;
          }
  }

  class Web extends Person {
          constructor(name: string) {
                  super(name) // 繼承 -- 初始化父類構(gòu)造函數(shù)
          }

          run(str: string): string {
                  console.log(this.name + '---- public范例 -- 子類訪問')
                  return str + " -- 子類方法";
          }

  }
  let p = new Web('李五');
  console.log(p.getName())
  console.log(p.run('李六'))
  console.log(p.name + "---- public范例 -- 類外訪問")

// protected(保護)  范例:
class Person {

      protected name: string;    // 屬性
      constructor(n: string) { // 構(gòu)造函數(shù) 實例話會觸發(fā)
             this.name = n;
     }

      getName(): string {
              console.log(this.name + '---- public范例 -- 類內(nèi)訪問')
              return this.name;
     }

      setName(name: string): void {
              this.name = name;
      }

      run(str: string): string {
              return str;
      }
}

class Web extends Person {
      constructor(name: string) {
              super(name) // 繼承 -- 初始化父類構(gòu)造函數(shù)
      }

      run(str: string): string {
              console.log(this.name + '---- public范例 -- 子類訪問')
              return str + " -- 子類方法";
      }

}
let p = new Web('李五');
console.log(p.getName())
console.log(p.run('李六'))
console.log(p.name + "---- public范例 -- 類外訪問") // 報錯

// private(私有) 范例:
class Person {

      private name: string;    // 屬性
      constructor(n: string) { // 構(gòu)造函數(shù) 實例話會觸發(fā)
              this.name = n;
      }

      getName(): string {
              console.log(this.name + '---- public范例 -- 類內(nèi)訪問')
              return this.name;
      }

      setName(name: string): void {
              this.name = name;
      }

      run(str: string): string {
              return str;
      }
}

class Web extends Person {
      constructor(name: string) {
              super(name) // 繼承 -- 初始化父類構(gòu)造函數(shù)
      }

      run(str: string): string {
              console.log(this.name + '---- public范例 -- 子類訪問') // 報錯 
              return str + " -- 子類方法";
      }

}
let p = new Web('李五');
console.log(p.getName())
console.log(p.run('李六'))
console.log(p.name + "---- public范例 -- 類外訪問") // 報錯

5裳食、靜態(tài)方法

class Person {
    public name: string;
    public age: number = 20;
    static sex: string = "男"
    constructor(name: string) {
           this.name = name
    }

    //  實例方法
    run(str: string): string {
            return str + "實例方法"
    }
    // 靜態(tài)方法 關(guān)鍵字: static(靜態(tài)方法 不能直接調(diào)用類里面都屬性)
    static print(str: string): string {
            console.log(this.age) // 報錯(因為使用了實力屬性)
            console.log(this.sex) // 正確(因為使用了靜態(tài)屬性)
            return str + "靜態(tài)方法"
    }
}
console.log(Person.print('print'))
console.log(Person.sex)
let p = new Person('張三');
console.log(p.run('run'))

6矛市、多態(tài)

// 父級定義一個方法不去實現(xiàn),讓繼承它的子級方法是去實現(xiàn)诲祸,每個子類有不同的表現(xiàn)浊吏;多態(tài)屬于繼承
class Anial {
    public name: string;
    constructor(name: string) {
            this.name = name;
    }

    eat() {
            //  定義了一個吃的方法,具體吃什么救氯,由繼承的子類去實現(xiàn)找田,每個子類的表現(xiàn)不一樣
            console.log("這是定義了一個吃的方法")
    }
}

class Dog extends Anial {

    constructor(name: string) {
            super(name)
    }

    eat() {
            return this.name + '吃狗糧'
    }
}

class Cat extends Anial {
    constructor(name: string) {
            super(name)
    }
    eat() {
            return this.name + "吃貓糧"
    }
}

let d = new Dog("狗");
let c = new Cat("貓");
console.log(d.eat())
console.log(c.eat())

7、抽象類

// (它是提供其他類繼承的基類着憨,不能直接實例化)
// (使用abstract關(guān)鍵字定義抽象類和抽象方法墩衙,抽象類中的抽象方法不包含具體實現(xiàn)并且必須在派生中實現(xiàn))
// (abstract方法只能放在抽象類里面)
// (抽象類 和 抽象方法是用來定義標(biāo)準)

abstract class Anial {
        public name: string;
            constructor(name: string) {
                this.name = name;
        }
        // 抽象方法(抽象方法只能出現(xiàn)在抽象類中!!!)
        abstract eat(): any;
}

class Dog extends Anial {

        constructor(name: any) {
                super(name);
        }
        // 必須實現(xiàn)父類抽象方法!!!!
        eat() {
                return this.name + "吃狗糧"
        }
}

class Cat extends Anial {
        constructor(name: any) {
                super(name);
        }
        run() {
                return this.name + "吃貓糧"
    }
}

let d = new Dog('狗');
let c = new Cat("貓");
console.log(d.eat())
console.log(c.run()) // 報錯:因為沒有實現(xiàn)父級的抽象方法

8、接口

8.1享扔、批量管理
interface FullName {
    firstNmae: string;
    secondName: string;
}

function printName(name: FullName) {
    console.log(`${name.firstNmae} ---${name.secondName}`)
}
function printInfo(info: FullName) {
    console.log(`${info.firstNmae} ---${info.secondName}`)
}

// printName({age:20,firstNmae:'張',secondName:'三'}) // 錯誤寫法: 因為直接在調(diào)用中寫底桂,只能有firstNmae和secondName并且是string類型
var obj = {
    firstNmae: '張',
    secondName: '三'
}
printName(obj); // 只種寫法,只要包含有 firstNmae和secondName并且是string類型
var info = {
    firstNmae: '李',
    secondName: '四'
}
printInfo(info);
8.2惧眠、可選屬性
interface FullName {
    firstNmae: string;
    secondName: string;
    age?: number
}


function printInfo(info: FullName) {
    console.log(`${info.firstNmae} ---${info.secondName}---${info.age ? info.age : ""}`)
}

let info = {
    firstNmae: '李',
    secondName: '四',
    // age: 20
}
printInfo(info);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末籽懦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子氛魁,更是在濱河造成了極大的恐慌暮顺,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秀存,死亡現(xiàn)場離奇詭異捶码,居然都是意外死亡,警方通過查閱死者的電腦和手機或链,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門惫恼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人澳盐,你說我怎么就攤上這事祈纯×钏蓿” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵腕窥,是天一觀的道長粒没。 經(jīng)常有香客問我,道長簇爆,這世上最難降的妖魔是什么癞松? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮入蛆,結(jié)果婚禮上响蓉,老公的妹妹穿的比我還像新娘。我一直安慰自己安寺,他們只是感情好厕妖,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挑庶,像睡著了一般言秸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上迎捺,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天举畸,我揣著相機與錄音,去河邊找鬼凳枝。 笑死抄沮,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的岖瑰。 我是一名探鬼主播叛买,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蹋订!你這毒婦竟也來了率挣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤露戒,失蹤者是張志新(化名)和其女友劉穎椒功,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體智什,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡动漾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了荠锭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旱眯。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出删豺,到底是詐尸還是另有隱情础爬,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布吼鳞,位于F島的核電站,受9級特大地震影響叫搁,放射性物質(zhì)發(fā)生泄漏赔桌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一渴逻、第九天 我趴在偏房一處隱蔽的房頂上張望疾党。 院中可真熱鬧,春花似錦惨奕、人聲如沸雪位。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雹洗。三九已至,卻和暖如春卧波,著一層夾襖步出監(jiān)牢的瞬間时肿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工港粱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留螃成,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓查坪,卻偏偏與公主長得像寸宏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子偿曙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容