TS中interface和type的区别

转:TS中interface和type的区别 - 北巷听雨 - 博客园

一,概念:

1.接口(Interface)

接口主要用于类型检查,它只是一个结构契约,定义了具有相似的名称和类型的对象结构。除此之外,接口还可以定义方法和事件。

2.类型别名(Type Alias)

不同于interface只能定义对象类型,type声明还可以定义基础类型、联合类型或交叉类型。

二,差异点:

1.定义类型范围

interface只能定义对象类型, 而type声明可以声明任何类型,包括基础类型、联合类型或交叉类型。

// 基本类型

type person = string

// 联合类型

interface Dog {

 name: string;

}

interface Cat {

 age: number;

}

type animal = Dog | Cat

// 元组类型

interface Dog {

name: string;

}

interface Cat {

age: number;

}

type animal = [Dog, Cat]

2.扩展性

接口可以extends、implements,从而扩展多个接口或类。类型没有扩展功能。

// interface extends interface

interface Person {

  name: string

}

interface User extends Person {

  age: number

}

// interface extends type

type Person = {

  name: string

}

interface User extends Person {

  age: number

}

type可以使用交叉类型&,来使成员类型合并

// type & type

type Person = {

   name: string

}

type User = Person & { age: number }

// type & interface

interface Person {

  name: string

}

type User = {age: number} & Person

3.合并声明

定义两个相同名称的接口会合并声明。

定义两个同名的type会出现异常。

interface Person {

  name: string

}

interface Person {

  age: number

}

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

4.typeof

type可以使用typeof获取实例类型

let div = document.createElement('div');

type B = typeof div

你可能感兴趣的:(ts,前端)