1. 程式人生 > 其它 >介面(interface)

介面(interface)

作用

在編譯期間,能夠對值的資料結構進行檢查。

用法

介面內部寫法

屬性

介面中的屬性分為:必需屬性,可選屬性,只讀屬性,額外屬性

interface Person{
    readonly id: number, //只讀屬性 (不允許修改)
    name: string, //必需屬性
    sex?: number,  //可選屬性
    [key: string]: any //額外屬性 
}

let person:Person = {id: 1, name: "蠟筆小新", hobby: "superman"};
person.id = 3453; //會提示只讀屬性不能修改


型別

  1. 函式型別,主要定義引數列表和返回值
  2. 可索引型別,具有一個索引簽名;索引簽名分為:數字和字串。數字是字串的子型別(因為在編譯的時候,數字會被轉化為字串)

    //函式型別的介面  (只定義引數列表和返回型別)
    interface SearchFunc {
        (source: string, subString: string): boolean;
    }
    

    let mySearch: SearchFunc;
    mySearch = function (sour: string, sub: string) {
    let result = sour.search(sub);
    return result > -1;
    }

    interface StringArray {
    [index: number]: string; //索引型別
    length: number;
    }
    let myArray: StringArray;
    myArray = ["4654","wfwf","wfewefewf"];
    let str: string = myArray[0];

介面在類、介面中的使用

在類中,

類實現介面,介面只描述了類的公共部分。
一個類在實現一個介面時,只對例項部分進行型別檢查。

    interface PersonInterface {
        say():void;
        //[key: string]: any;
    }
    class Student implements PersonInterface {
        name: string;
        constructor(name: string){
            this.name = name;
        }
        say() {
            console.log("Hi,"+ this.name);
        }
    }
    let student = new Student("傻白");

補充概念
類靜態部分 & 例項部分
靜態部分: contrutor 函式
例項部分

在介面中,

介面與介面之間也可以相互繼承:extends

interface Shape {
    color: string;
}
interface PenStroke {
    PenWidth: number;
}
interface Square extends Shape, PenStroke {
    sideLength: number;
}

let square = <Square>{color: "df", PenWidth: 346346,sideLength: 45654};

介面繼承類

只繼承類的成員但不包括其實現。如果這個類剛好有private和protected成員,按要實現這個介面的類一定是子類。

class Control {
    state: any;
    private type: string;
}

interface SelectableControl extends Control {
select() : void;
}

class Button extends Control implements SelectableControl {
select() {
console.log(this.state);
}
constructor(state: string) {
super();
this.state = state;
}
}

let button = new Button("按鈕");
console.dir(button);