type 类型别名
- 给类型起一个新名字,当声明非对象类型时适用
type MyNumber = number
type StringOrNumber = string | number
type Text = string | string[]
type Point = [number, number]
type Callback = (data: string) => void
- 支持传入泛型
常用的工具方法都是通过 type 实现的
type Partial<T> = {
[P in keyof T]?: T[P]
}
interface 接口
只能用于定义对象类型
可以定义对象类型上的属性和方法
相同点
- 都可以用来描述对象或函数
- 都支持扩展
type 通过 & 交叉运算符来扩展,interface 通过 extends 关键字来扩展
区别
-
type 可以为基本类型、联合类型或元祖类型定义别名,而接口不行
-
同名接口会自动合并,而类型别名不会
1). 不同属性之间直接合并
interface User {
name: string
}
interface User {
id: number
}
合并成
interface User {
name: string
id: number
}
2). 相同属性不同类型,报错
interface User {
name: string
}
interface User {
// 报错 name 必须是 stirng 类型
name: number
}
3). type 直接报错
type User = {
name: string
}
// 报错:标识符“User" 重复
type User = {
id: number
}
- interface 会创建新的类型名,type 只是创建类型别名,并没有新创建类型。
使用场景

网友评论