typescript中的interface和type的区别分别的概念

interfacetype 都是创建自定义类型的手段。

主要区别:

1、扩展方式

  • interface 使用 extends 关键字来继承另一个接口。
  • type 使用交叉类型 & 来组合多个类型。

2、灵活性

  • interface 只能描述对象形状,不能用于联合类型、交叉类型等。
  • type 更加灵活,可以描述对象形状、联合类型、交叉类型、映射类型等。

3、 递归和自引用

  • interface 不能直接在定义中引用自己(除非通过间接方式如泛型)。
  • type 可以在定义中直接引用自己,创建递归类型。

4、合并行为

  • 如果有多个具有相同名称的 interface,它们会被合并为一个接口。
  • type 不支持合并行为。

一、interface接口

接口用来定义一个类中应该包含哪些属性和方法,同时接口也可以当成类型声明来使用。

接口可以在定义时去限制类的结构,接口中的所有属性都不能有实际的值(所有的方法都得是抽象方法)

接口的定义方式:

interface Person {
  name: string;
  age: number;
  greet(): void; // 描述一个方法
}

使用:

const employee: Person = {  
    name: "John Doe",  
    age: 30,  
    greet() {  
        console.log("Hello!");  
    }  
};

二、type

type 是一种使用 type 关键字定义的类型别名。

它也可以描述一个对象的形状,但比 interface 更加灵活。type 可以用于定义除了对象形状之外的其他类型,如基本类型、联合类型、交叉类型等。

type不能像interface那样被extends,但可以通过交叉类型实现类似效果。

示例:

type Person = {  
    name: string;  
    age: number;  
    greet: () => void;  
};  
 
type Employee = Person & {  
    employeeId: string;  
};  
 
const employee: Employee = {  
    name: "Jane Doe",  
    age: 25,  
    employeeId: "54321",  
    greet() {  
        console.log("Hi!");  
    }  
};  
 
// 交叉类型示例  
type Admin = Employee & {  
    adminLevel: number;  
};  
 
const admin: Admin = {  
    name: "Admin User",  
    age: 40,  
    employeeId: "67890",  
    greet() {  
        console.log("Admin greeting!");  
    },  
    adminLevel: 3  
};

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值