type 和 interface的异同
时间: 2025-01-05 22:48:16 浏览: 4
在TypeScript中,`type`和`interface`都是用来定义类型的,但它们有一些异同点:
### 相同点
1. **定义对象类型**:
```typescript
type User = {
name: string;
age: number;
};
interface IUser {
name: string;
age: number;
}
```
2. **扩展类型**:
```typescript
type Animal = {
name: string;
};
interface IAnimal {
name: string;
}
type Dog = Animal & {
breed: string;
};
interface IDog extends IAnimal {
breed: string;
}
```
### 不同点
1. **合并声明**:
`interface`可以合并声明,而`type`不行。
```typescript
interface IUser {
name: string;
}
interface IUser {
age: number;
}
// 等同于
interface IUser {
name: string;
age: number;
}
// type不能合并声明
type User = {
name: string;
};
type User = {
age: number;
};
// 会报错:重复声明
```
2. **基本类型**:
`type`可以用于基本类型和联合类型,而`interface`不行。
```typescript
type ID = string | number;
// interface ID = string | number; // 会报错
```
3. **计算属性名**:
`type`支持计算属性名,而`interface`不行。
```typescript
type Keys = 'first' | 'second';
type MyType = {
[key in Keys]: boolean;
};
// interface MyInterface {
// [key in Keys]: boolean; // 会报错
// }
```
### 总结
- `interface`更适合定义对象类型,并且支持合并声明。
- `type`更适合定义基本类型、联合类型和计算属性名。
阅读全文