TypeScript的type和interface


一、interface(接口)

interface主要用于描述对象的形状,即一组必须遵循的属性和方法的集合。用于类型检查,interface只能用于定义对象类型

interface Person {
  name: string;
  age: number;
  getName(): string;
}

二、type(类型别名)

类型别名主要用于为任何类型创建新名称。type可用于任何类型

type Age = number;
type Name = string;
type PersonInfo = {
  name: Name;
  age: Age;
};

三、主要区别

1.interface可声明合并,type不行

1.interface多次定义接口和合并声明

interface Person { name: string }
interface Person { age: number }
// 合并后: { name: string; age: number }

2.type重复定义会报错

 type PersonInfo = {
      name: Name;
      age: Age;
    };

 type PersonInfo = {
      address: string;
    };
 //报错PersonInfo声明重复

2.扩展方式不同

1.interface使用extends扩展

  interface Person {
      name: string;
      age: number;
      getName(): string;
    }
 //在已有Person声明的方法和属性外,扩展了一个方法
    interface Person1 extends Person {
      getAge(): string;
    }

2.type通过交叉类型&扩展

 type PersonInfo = {
      name: Name;
      age: Age;
    };
    type PersonInfo1 = PersonInfo & { address: string };

3.适用范围

interface主要适用于对象类型,包括类、函数、数组

type适用于任何类型,包括原始类型、两个类型、元组

type ID = string | number;  // 联合类型
type Coordinates = [number, number];  // 元组

4.实现类

implements用于实现接口(可多实现),需强制实现接口中非可选的属性和方法

1.interface可被类实现implements,必须实现类

 interface Person {
      name?: string;
      age: number;
      getName(): string;
    }
//由于name可选,所以类可以不实现
    class Person2 implements Person {
      age: number;
      getName(): string {
        return '';
      }
    }

2.type不能被类实现,除非为对象类型

 type Person3 = {
      name?: string;
      age: number;
      getName(): string;
    };
    class Person2 implements Person3 {
      age: number;
      getName(): string {
        return '';
      }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值