- type是类型
别名
,并不是真正的类型 - type 声明一个带属性的函数:
type FnWithProps = {
(a:number,b:number): number,
props: string
}
const fn: FnWithProps = (a,b) => a+b
fn.props = 'xxx'
-
interface
是声明一个接口
,描述对象的属性
interface X {
age: number
}
type A1 = Array<string> & {
name: string
} & X
等同于
interface A2 extends Array<string>,X {
name: string
}
- interface描述函数
interface FnWithProp {
(a:number,b:number): number
prop?: string
}
const fn:Fn = (a,b) => a+b
fn.prop = 'xxx'
- interface 描述日期,
类型里不能添加属性了
interface D extends Date {}
const date: D = new Date()
- type不可以重新赋值
- interface可以重新赋值
总结区别:
- type是类型
别名
,并不是真正的类型,interface是类型声明,具有真实效果 - type可以描述
任何类型
,interface只针对对象
- type
不可以
重复声明,interface可以
重复声明,会自动合并
,即可以扩展
,比如在axios中扩展config的配置参数类型。因此写库
的时候一般用interface
,方便扩展
;自己项目的时候一般用type
,防止被篡改
- type
交叉类型
功能类似于interface的继承
- type功能相对来说更强大,
工具类型
都是用type来实现的
网友评论