typeScript学习-interface和type 区别

发布时间 2023-08-16 17:07:28作者: 空白格k

typeScript学习

interface(接口) 和 type 区别

type 和接口类似,都用来定义类型,但 type 和 interface 区别如下:

区别1:定义类型范围不同

interface 只能定义对象类型或接口当名字的函数类型。

type 可以定义任何类型,包括基础类型、联合类型、交叉类型,元组。

// type 定义基础类型
type num = number

// type 定义联合类型-示例1
type baseType = string | number | symbol

// type 定义联合类型-示例2
interface Car { brandNo: String }
interface Plane { No: string, brandNo: String }

type TypVechile = Car | Plane


let vechile1: TypVechile = { brandNo: "奔驰" }
let vechile2: TypVechile = { brandNo: "宝马", No: "AB1001" }

// 元组
interface Car2 { brandNo: String }
interface Plane2 { No: string, brandNo: String }

type TypVechile2 = [Car2, Plane2]

 

区别2:

接口可以 extends(继承) 一个或多个接口或类实现一个或多个接口,也可以继承 type,但 type 类型没有继承功能,

但一版接口继承 类 和 type 的应用场景很少见。

区别3:

用 type 交叉类型 & 可让类型中的成员合并成一个新的 type 类型,但接口不能交叉合并

type Group = { groupName: string, memberNum: number }
type GroupInfoLog = { info: string, happen: string }
type GroupMemeber = Group & GroupInfoLog // type 交叉类型

let data: GroupMemeber = {
    groupName: '001',
    memberNum: 10,
    info: '爬山',
    happen: '有惊无险'
}

export { }

 

区别4:接口可合并声明

定义两个相同名称的接口会合并声明,定义两个同名的 type 会出现编译错误。

interface Error {
    name: string
}

interface Error {
    message: string,
    stack?: string
}

// 接口合并

let error: Error = {
    message: '空指针',
    name: 'NullPointException'
}