类型别名
在 TypeScript 中,类型别名(Type Alias)是一种用于为类型创建新名称的方式。它可以帮助我们抽离内联类型,从而实现类型的复用。
基础使用
类型别名可以用于定义对象类型、基本类型、联合类型、交叉类型等。
1type PersonInfo = { name: string; age: number };
2
3// 类型别名的基本语法是:type 别名名称 = 类型定义
4let zs: PersonInfo = {
5 name: "张三",
6 age: 20,
7};
在这个例子中, PersonInfo 是一个类型别名,用于描述一个包含 name 和 age 属性的对象。
特定使用场景
虽然类型别名和接口在许多情况下是等价的,但类型别名在某些特定场景下更为灵活。
1// 1. 联合类型
2type NumAndString = number | string;
3
4const num: NumAndString = 1
5const str: NumAndString = 'hello'
6
7// 2. 交叉类型
8type SectionType = { name: string; age: number } & {
9 height: number;
10 name: string;
11};
12
13let zs: SectionType = {
14 name: "张三",
15 age: 20,
16 height: 180,
17};
18
19// 3. 提取接口属性类型
20interface PersonInfo {
21 name: string;
22 height: number;
23}
24type PersonHeight = PersonInfo["height"];
25
26
27// 黑魔法
28type BorderColor = 'black' | 'red' | 'green' | 'yellow' | 'blue' | string & {}; // vscode提示字面类型都被保留
interface 与 Type 的区别
虽然接口和类型别名在大多数情况下可以互换使用,但它们之间存在一些重要的区别:
- 重复定义的接口类型,它的属性会叠加,这个特性使得我们可以极其方便地对全局变量、第三方库的类型做扩展
- 如果我们重复定义类型别名,那么就会报错,类型别名 直接支持交叉类型和联合类型 ,接口不支持