函數相關知識點梳理es6
// 1. 必選參數不能位於可選參數以後 function add5(x: number, y?: number){ return x? x + y: x } // 2.給參數默認值;在必選參數前,默認參數是不能夠省略的;能夠明確的傳入undefind,來獲取默認值; function add(x: number, y = 0, z: number, q = 1) { return x + y + z + q } console.log(2, undefind, 3); // rest function add7(x: number,...rest: number[]){ return x + rest.reduce((pre, curl) => pre + curl) } add7(1, 2, 3, 4, 5)
函數重載curl
function add8(...rest: number[]): number function add8(...rest: string[]): string function add8(...rest: any[]): any{ let first = rest[0] if(typeof first === 'string') { return rest.join('') } if(typeof first === 'number') { return rest.reduce((pre, curl) => pre + curl) } }
ts 中的類覆蓋了 es6 中的類,同時也引入了其餘一些特性;函數
class Dog { // 加上了private關鍵字,既不能被實例化,也不能被繼承 private constructor(name: string) { // this.name = name; } // 不管在es仍是ts中,類成員的屬性都是實例的屬性,而不是 原型屬性; // 類成員的方法都是原型方法 // ts中 ,實例的屬性必須具備初始值,或者在構造函數中被初始化, name: string = 'dog'; dName?: string = 'dog'; run() {} private pri(){} protected protect(){} readonly legs: number = 4; static food: string = "tomato" } let dog = new Dog('dd'); // dog.pri() 報錯 // dog.protect() 報錯 console.log('dog', dog); console.log(Dog.prototype); console.log(Dog.tomato) // 報錯,console.log(dog.tomato)
類的繼承this
class Huskey extends Dod { constructor(name:string, color: string, food: string){ super() // 派生類的構造函數必須包含super調用,父類的實例,super代碼父類的實例; this.color = color; // this.pri() 私有成員,報錯 this.protect() this.food = food } color: string }
類的成員修飾符url
class Huskey extends Dod { constructor(name:string,public color: string){ super() this.color = color; } // color: string 構造函數聲明瞭color,這裏能夠省略 }
抽象類prototype
abstract class Animal { eat(){ } abstract sleep(): void } // let animal = new Animal() 報錯 class Dog extends Animal{ constructor(name: string){ super() this.name = name } name: string run() {} sleep(){ console.log('dog sleep') } } let dog1 = new Dog("dahuang"); dog1.eat() class Cat extends Animal { sleep(){ console.log('cat sleep'); } } let cat = new Cat(); let animals = Animal[dog, cat]; animals.forEach(i => { i.sleep() // 這裏執行的時候,就會判斷是哪一個實例,就會執行對應的方法; })
多態rest
就是在父類中定義一個抽象方法,在多個子類中,有對這個方法不一樣的實現;在程序運行時,會根據不一樣的對象執行不一樣的操做;這樣就實現了運行時的綁定code
this 類型對象
class WorkFlow{ step1(){ return this; } step2(){ return this; } } new WorkFlow().step1().step2(); class MyFlow extends WorkFlow{ next(){ return this; } } // 這時 this能夠是子類類型,也能夠是父類類型; new MyFlow().next().step1().next().step2()
interface Human { // new (name: string): void; 報錯 name: string; eat(): void }繼承
// 1.類實現接口的時候,必須實現接口中聲明的全部的屬性; // 若是類定義一個本身的屬性,這樣是能夠的 class Asian implements Human { constructor(name: string){ this.name = name } name: string // private name: string 報錯 eat(){} sleep(){} } // 2. 接口只能約束類的公有成員,不能約束私有成員 // 3. 接口不能約束類的構造函數;