ts中type、interface的区别

概念

interface:接口,TS 设计出来主要用于定义【对象类型】,可以对【对象】的形状进行描述。
type :类型别名,为类型创建一个新名称。它并不是一个类型,只是一个别名。

类型别名可以起到类似接口的作用。但是,有一些细微的差别。
主要区别在于 type 一旦定义就不能再添加新的属性,而 interface 总是可扩展的

使用的区别

interface

  • 接口可以重复声明(如下会有示例),TS会将它们合并。
//适用于结构类型系统
interface Point = {
	x: number;
	y: number;
}

例如:interface: 通过定义2次同名的接口

interface Mywindow {
	count: number
}
interface Mywindow {
	title: string
}
const w: Mywindow = {
	title: 'hello ts',
	count: 100
}

type: 类型创建后不能更改,不能通过同一个名称去扩展我们的类型,只能通过&去扩展。

type

  • 可以定义基本类型别名,如type StringType = string
  • 可以声明联合类型,如 type paramType = number | string;
  • 可以声明元组类型,如type arrType = [string, string, number]
//1.type为关键字
//2.Point变量名一般大写
type Point = {
	x: number;
	y: number;
} 

联合类型(Union Types),表示取值可以为多种类型中的一种。使用 | 分隔每个类型。
这里的 string | number 的含义是,允许param的类型是 string 或者 number,但是不能是其他类型。

元组 Tuple,元组类型允许标示一个已知元素数量和类型的数组,各元素的类型不必相同。

interface扩展接口

interface Animal {
	name: string
}
interface Bear extends Animal {
	honey: boolean
}
// 定义bear的实例
const bear:Bear = {
	name: 'wine',
	honey: true
}
// 如果不写honey属性就会报错 

type交叉扩展

type Animal {
	name: string
}
type Bear & Animal {
	honey: boolean
}

总结

1、如果需要被 extends 或者 implements(实现接口), 则尽量使用接口。
2、如果需要使用联合类型或者元组类型,类型别名会更合适。
3、如果是定义对象或函数,则都可以。
4、如果实在不想选择的话,就能用interface实现,用interface,如果不能就用type

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值