一个叫接口,一个叫类型别名。只是有时候两者都能实现同样的功能,才会经常被混淆。
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关键字来约束类