1.函數接口:
對方法傳入的參數以及返回值進行約束——批量約束(即對函數的輸入參數和輸出結果的約束)
interface encrypt { (key: string, value: string): string; } // 對傳入的參數以及返回值進行約束 let md1: encrypt = function (key: string, value: string): string { return key + value; } console.log(md1('張三', '初一一班')); let md2: encrypt = function (key: string, value: string): string { return key + value; } console.log(md2('李四', '初二三班'));
2.可索引接口
對數組、對象的約束
(1)對數組的約束
interface UserArr { [index: number]: string } let arr: UserArr = ['aaa', '111']; console.log(arr[1]);
(2)對對象的約束
interface UserObj { [index: string]: string } let obj: UserObj = { name: '張三', age: '20' } console.log(obj);
3.類類型接口
對類的約束(和抽象類相似)
interface Animal { name: string; eat(str: string): void; } class Dog implements Animal { // 必須包含name name: string; constructor(name: string) { this.name = name; } // 必須包含eat方法 eat() { console.log(this.name + '吃肉'); } } let d = new Dog('達摩'); d.eat();
4.接口的擴展
接口也是可以繼承的
// 父接口 interface Animal { eat(): void; } // 子接口繼承自父接口 interface Person extends Animal { work(): void; } class Programmer { name: string; constructor(name: string) { this.name = name; } coding() { console.log(this.name + "在寫代碼"); } }
// 類的繼承和接口的繼承 class Web extends Programmer implements Person { constructor(name: string) { super(name); } // 由於繼承關系,所以這個類必須同時包含父接口和子接口的方法 eat() { console.log(this.name + "在吃飯"); } work() { console.log(this.name + "在工作"); } } let w = new Web('張三'); w.work(); w.eat(); w.coding();