4. 接口

## 接口的定义及作用 - **接口**:行为和动作的约束,对批量方法进行约束。 - **接口的作用**:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范。在程序设计中,接口起到限制和规范的作用。接口定义了某一批类中所需要遵循的规范,接口不关心这些类的内部状态数据,也不关心这些类中方法的实现细节,他只规定了这批类中必须提供某些方法,提供这些方法的类就可以满足实际需要。ts中的接口类似Java,还同时增加了更灵活的接口类型,包括属性、函数、可索引和类等。 ## 关键词 - `interface`声明接口 - `readonly`只读属性。一些对象属性只能在对象刚刚创建的时候修改其值。 你可以在属性名前用 readonly来指定只读属性。 - `implements`实现类类型接口 ## 属性接口 属性接口:对传入对象的约束(批量约束)。 ``` interface LabelledValue { label: string; } function printLabel(labelledObj: LabelledValue) { console.log(labelledObj.label); } let myObj = {size: 10, label: "Size 10 Object"}; printLabel(myObj); ``` ## 可选属性 属性名后加`?` ``` interface SquareConfig { color?: string; width?: number; } function createSquare(config: SquareConfig): {color: string; area: number} { let newSquare = {color: "white", area: 100}; if (config.color) { newSquare.color = config.color; } if (config.width) { newSquare.area = config.width * config.width; } return newSquare; } let mySquare = createSquare({color: "black"}); ``` ## 函数类型接口 - **函数类型接口**:对方法传入的参数,以及返回值进行约束。 ``` interface SearchFunc { (source: string, subString: string): boolean; } let mySearch: SearchFunc; mySearch = function(src: string, sub: string): boolean {//对于函数类型的类型检查来说,函数的参数名不需要与接口里定义的名字相匹配。 let result = src.search(sub); return result > -1; } ``` ## 可索引接口 - **可索引接口**:对数组、对象的约束。{不常用} ## 类类型接口 - **类类型接口**:对类的约束。{常用,与抽象类较为相似} --- ## 接口的继承