Skip to content

接口

  • 接口是一种定义对象形状的方式,它可以描述对象的属性和方法。

定义接口

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 [];
	}
}