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;
}
```
## 可索引接口
- **可索引接口**:对数组、对象的约束。{不常用}
## 类类型接口
- **类类型接口**:对类的约束。{常用,与抽象类较为相似}
---
## 接口的继承