说说interface和type的区别?

一、基本概念
1、type(类型别名)
用来给一个类型起新名字,使用 type 创建类型别名。类型别名不仅可以用来表示基本类型,还可以用来表示对象类型、联合类型、元组和交集。

type userName = string;   // 基本类型
type userMsg = string | number;   // 联合类型
 
// 对象类型
type Person = {
    name: userName;
    age: number;
};
 
// 使用Person类型
let user: Person = {
    name: "leo",
    age: 18
};

2、interface(接口)
接口是命名数据结构(例如对象)的另一种方式;与 type 不同,interface 仅限于描述对象类型。接口的声明语法也不同于类型别名的声明语法。如将上面的类型别名 Person 重写为接口声明如下所示。

interface Person {
    name: userName;
    age: number;
}


在很多编程语言中,包括 TypeScript、Java 和 C# 等,都提供了 interface 和 type 这两个关键词用于定义自定义类型。它们有一些相似之处,但也存在一些重要的区别。

区别如下:

1. 语法和声明方式:在 TypeScript 中,interface 使用 `interface` 关键词声明,而 type 使用 `type` 关键词声明。

   ```typescript
   interface Person {
     name: string;
     age: number;
   }

   type Point = {
     x: number;
     y: number;
   };
   ```

2. 对象类型 vs. 声明类型:interface 主要用于描述对象的形状和结构,通过定义属性名称和类型,但不能直接定义基本类型、联合类型和元组类型等非对象类型。而 type 可以用于定义任意类型,包括对象类型、基本类型、联合类型、交叉类型等。

   ```typescript
   type Age = number;

   interface Person {
     name: string;
     age: Age; // 可以使用 type 定义的类型
   }

   type Point = {
     x: number;
     y: number;
   };

   type Coordinates = [number, number]; // 元组类型
   ```

3. 继承和实现:interface 支持继承其他 interface,并且一个类可以实现多个接口(多继承)。而 type 无法实现继承和多继承的特性。

   ```typescript
   interface Animal {
     eat(): void;
   }

   interface Cat extends Animal {
     meow(): void;
   }

   class HouseCat implements Cat {
     eat() {
       console.log("Eating");
     }

     meow() {
       console.log("Meowing");
     }
   }
   ```

4. 可以扩展性:type 可以通过联合类型、交叉类型和映射类型等特性,更灵活地对现有类型进行组合或转换。而 interface 的定义通常较为简单,更注重对对象形状的描述和约束。

   ```typescript
   type Person = {
     name: string;
     age: number;
   };

   type Employee = Person & {
     companyId: string;
   };

   type Nullable<T> = T | null;
   ```

总的来说,interface 更适合用于定义对象的形状、刻画接口规范和类的实现,而 type 则更适合用于灵活地定义各种类型,并进行类型的组合、重命名和转换。在实际使用时,可以根据具体需求和语言特性选择合适的关键词来定义自定义类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值