Appearance
接口
- 接口是一种定义对象形状的方式,它可以描述对象的属性和方法。
定义接口
typescript
interface Person {
name: string;
age: number;
}实现接口
typescript
// 方式1
let p: Person = {
name: 'a',
age: 1,
};
// 方式2
class Student implements Person {
name: string;
age: number;
}使用场景
- 接口像一个设计图,我先定义好建筑的属性,以及建筑的作用。但是不会实现具体的功能。
- 常用于为类服务,为类提供一种规范,类必须符合接口的定义。
示例1
- 我们有很多商品,每个商品有很多固定属性和方法,如果一个一个去定义这些商品的属性和方法是非常麻烦的,而且非常容易出错。
- 所以我们要有一个基准,即商品的属性和方法,每个商品类实现这个接口,就可以避免重复定义这些属性和方法。
typescript
interface Product {
// 商品的属性
id: number;
name: string;
price: number;
// 商品的方法
getPrice(): number;
setPrice(price: number): void;
}
class Book implements Product {
id: number;
name: string;
price: number;
weight: number;
// 商品的额外属性
author: string;
getPrice(): number {
return this.price;
}
setPrice(price: number): void {
this.price = price;
}
// 额外的方法
getBookInfo(): string {
return `id: ${this.id}, name: ${this.name}, price: ${this.price}`;
}
}示例2
- 对于数据表,我们经常进行CURD操作。但是在不同人操作数据时,会定义不同的方法,字段,导致代码重复。
- 所以我们可以定义一个接口,为不同的人操作数据时,提供一种规范。
typescript
interface Table {
name: string;
fields: string[];
primaryKey: string;
// 其他方法
insert(data: any): void;
update(data: any): void;
delete(data: any): void;
query(data: any): any[];
}
// 其他人实现,这样所有人代码一致
class UserTable implements Table {
name: string;
fields: string[];
primaryKey: string;
insert(data: any): void {
console.log('insert user');
}
update(data: any): void {
console.log('update user');
}
delete(data: any): void {
console.log('delete user');
}
query(data: any): any[] {
console.log('query user');
return [];
}
}