TypeScript 接口和类型别名
时间: 2023-09-06 19:13:09 浏览: 103
你不知道的 TypeScript 高级类型(小结)
5星 · 资源好评率100%
TypeScript 中的接口和类型别名都可用于定义类型,但在一些情况下,它们有不同的使用场景。
接口用于描述对象的形状,可以用来定义对象的属性、方法和方法的参数类型。例如:
```typescript
interface Person {
name: string;
age: number;
sayHello: () => void;
}
const person: Person = {
name: 'Tom',
age: 18,
sayHello() {
console.log(`Hello, my name is ${this.name}`);
}
};
```
类型别名用于给一个类型定义一个新的名字,可以用来定义基本类型、联合类型、交叉类型等。例如:
```typescript
type Age = number;
type Name = string;
type Person = {
name: Name;
age: Age;
};
const person: Person = {
name: 'Tom',
age: 18,
};
```
需要注意的是,接口和类型别名都可以用于描述函数类型:
```typescript
interface Add {
(a: number, b: number): number;
}
type Sub = (a: number, b: number) => number;
const add: Add = (a, b) => a + b;
const sub: Sub = (a, b) => a - b;
```
但是,接口和类型别名在描述函数类型时有所不同。接口可以描述函数的可选参数、默认参数和剩余参数,而类型别名则不能。例如:
```typescript
interface Func {
(a: number, b?: number, ...rest: number[]): void;
}
type FuncAlias = (a: number, b?: number, ...rest: number[]) => void;
const func: Func = (a, b, ...rest) => {
console.log(a, b, rest);
};
const funcAlias: FuncAlias = (a, b, ...rest) => {
console.log(a, b, rest);
};
```
因此,在需要描述函数类型时,建议优先使用接口。
阅读全文