在 TS 中,type 和 interface相似,都可以给类型命名并通过该名字来引用表示的类型。不过它们之间是存在一些差别的,我们在使用时也需要注意一些特殊场景。

概念:

type:类型别名,为类型创建一个新名称。它并不是一个类型,只是一个别名。

type关键字是声明类型别名的关键字。它的语法如下:

type AliasName = Type;
  • type:声明类型别名的关键字
  • AliasName:类型别名的名称
  • Type:类型别名关联的具体类型

interface:接口,TS 设计出来主要用于定义对象类型,可以对对象的形状进行描述。

通过关键字 interface可以定义一个接口类型。它能合并众多类型声明至一个类型声明。

接口声明只存在于编译阶段,在编译后生成的 JS 代码中不包含任何接口代码。

语法如下:

interface InterfaceName {
  TypeMember;
  TypeMember;
  ...
}
  • interface:定义接口的关键字
  • InterfaceName:接口名,首字母需要大写
  • TypeMember:接口的类型成员

区别:

1.interface可以重复声明,type定义后不能重复声明

 2.interface可以通过“extends”来继承接口,这样既高效又不用重新定义。而type只能通过&来实现类似于继承的功能

3.

type 能够表示非对象类型, 而 interface 则只能表示对象类型

type

  • 可以定义基本类型别名,如type StringType = string
  • 可以声明联合类型,如 type paramType = number | string;
  • 可以声明元组类型,如type arrType = [string, string, number]

定义对象时严谨的来说,type 是引用,而 interface是定义。