TS-3 type 和 interface

  • 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可以重新赋值

总结区别:

  1. type是类型别名,并不是真正的类型,interface是类型声明,具有真实效果
  2. type可以描述任何类型,interface只针对对象
  3. type不可以重复声明,interface可以重复声明,会自动合并,即可以扩展,比如在axios中扩展config的配置参数类型。因此写的时候一般用interface方便扩展;自己项目的时候一般用type,防止被篡改
  4. type交叉类型功能类似于interface的继承
  5. type功能相对来说更强大,工具类型都是用type来实现的
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容