TS:type 和 interface的区别

一个叫接口,一个叫类型别名。只是有时候两者都能实现同样的功能,才会经常被混淆。

interface

interface(接口) 是 TS 设计出来用于定义对象类型的,可以对对象的形状进行描述。

interface Person {
    uname: string
    age: number
}

const person: Person = {
    uname: 'lin',
    age: 18
}

type

type (类型别名),顾名思义,类型别名只是给类型起一个新名字。它并不是一个类型,只是一个别名而已

两者的共同点

都可以定义一个对象或函数

我们来看一下如何定义函数。

type addType = (num1:number,num2:number) => number

interface addType {
    (num1:number,num2:number):number
}
都可以继承
interface 继承 interface
interface Person { 
  name: string 
}
interface Student extends Person { 
  grade: number 
}
复制代码
const person:Student = {
  name: 'lin',
  grade: 100
}
复制代码
type 继承 type
type Person = { 
  name: string 
}
type Student = Person & { grade: number  }    用交叉类型
复制代码
interface 继承 type
type Person = { 
  name: string 
}

interface Student extends Person { 
  grade: number 
}
复制代码
type 继承 interface
interface Person { 
  name: string 
}

type Student = Person & { grade: number  }    用交叉类型

interface 使用 extends 实现继承, type 使用交叉类型实现继承

两者的不同点

声明类型

type作为类型别名,可以给任何类型起别名

interface基本只用来给对象定义类型接口

重复声明

interface可以重复声明,会合并接口类型

type会报错

interface可以使用implements关键字来约束类

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容