TypeScript 中接口和类型:重新审视你的代码构建方式
2023-09-02 05:13:57
TypeScript 中的接口
接口是 TypeScript 中用于定义对象的形状的工具。它允许您指定对象应该具有哪些属性及其类型。接口可以用来对函数的参数和返回值进行类型检查,也可以用来定义类的形状。
接口的基本用法
定义一个接口非常简单,只需要使用 interface
,然后指定接口的名称和它所包含的属性及其类型。例如,以下代码定义了一个名为 Person
的接口:
interface Person {
name: string;
age: number;
}
这个接口定义了一个 Person
对象,它有两个属性:name
和 age
。name
属性的类型是 string
,age
属性的类型是 number
。
接口的扩展
接口可以被扩展以添加新的属性或覆盖现有属性。要扩展一个接口,可以使用 extends
关键字,然后指定要扩展的接口的名称。例如,以下代码定义了一个名为 Employee
的接口,它扩展了 Person
接口:
interface Employee extends Person {
jobTitle: string;
salary: number;
}
Employee
接口继承了 Person
接口的所有属性,并添加了两个新的属性:jobTitle
和 salary
。
接口的实现
类和对象可以通过实现接口来满足接口的要求。要实现一个接口,可以使用 implements
关键字,然后指定要实现的接口的名称。例如,以下代码定义了一个名为 Employee
的类,它实现了 Person
接口和 Employee
接口:
class Employee implements Person, Employee {
name: string;
age: number;
jobTitle: string;
salary: number;
constructor(name: string, age: number, jobTitle: string, salary: number) {
this.name = name;
this.age = age;
this.jobTitle = jobTitle;
this.salary = salary;
}
}
Employee
类实现了 Person
接口和 Employee
接口的所有属性和方法。
TypeScript 中的类型
类型是 TypeScript 中用于定义变量、函数参数和返回值的数据类型的工具。类型可以是基本类型,如 string
、number
和 boolean
,也可以是复合类型,如数组、对象和函数。
类型的基本用法
定义一个类型非常简单,只需要使用 type
关键字,然后指定类型的名称和它的类型。例如,以下代码定义了一个名为 PersonType
的类型:
type PersonType = {
name: string;
age: number;
};
这个类型定义了一个 Person
对象,它有两个属性:name
和 age
。name
属性的类型是 string
,age
属性的类型是 number
。
类型别名
类型别名允许您为现有的类型创建一个新的名称。这可以使您的代码更具可读性和可维护性。例如,以下代码定义了一个名为 PersonAlias
的类型别名,它别名了 PersonType
类型:
type PersonAlias = PersonType;
现在,您可以使用 PersonAlias
类型来声明变量、函数参数和返回值。
联合类型
联合类型允许您定义一个类型,它可以是多个其他类型的其中一种。联合类型使用 |
符号来分隔不同的类型。例如,以下代码定义了一个名为 PersonOrEmployeeType
的联合类型,它可以是 PersonType
类型或 EmployeeType
类型:
type PersonOrEmployeeType = PersonType | EmployeeType;
现在,您可以使用 PersonOrEmployeeType
类型来声明变量、函数参数和返回值。
接口和类型的区别
接口和类型都是 TypeScript 中用于定义数据的工具,但它们之间存在一些关键的区别。
- 接口定义了对象的形状,而类型定义了数据的类型。 接口可以用来定义对象应该具有哪些属性及其类型,而类型可以用来定义变量、函数参数和返回值的数据类型。
- 接口可以被扩展,而类型不可以。 接口可以被扩展以添加新的属性或覆盖现有属性,而类型不可以。
- 接口可以被类和对象实现,而类型不可以。 类和对象可以通过实现接口来满足接口的要求,而类型不可以。
何时使用接口,何时使用类型
在 TypeScript 中,接口和类型都有自己的适用场景。一般来说,以下情况适合使用接口:
- 当您需要定义一个对象的形状时。
- 当您需要对函数的参数和返回值进行类型检查时。
- 当您需要定义类的形状时。
以下情况适合使用类型:
- 当您需要定义一个变量的数据类型时。
- 当您需要定义一个函数的参数的数据类型时。
- 当您需要定义一个函数的返回值的数据类型时。
结论
接口和类型是 TypeScript 中构建强大且可维护的代码的关键。了解两者之间的区别可以帮助您编写出更清洁、更健壮的代码。