Typescript中type和interface的异同点

112 阅读1分钟

定义

type为类型别名,主要是为联合类型取一个单独的名字。interface为接口,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。

相同点

1:可以描述对象或者函数

// interface
interface User {
  name: string;
  age: number;
}

interface SetUser {
  (name: string, age: number): void;
}

// type
type User2 = {
  name: string;
  age: number;
};

type SetUser2 = (name: string, age: number) => void;

2:二者可以继承并且可以相互继承,只是语法上有区别 

type是采用&符号继承,interface采用的是extends


// interface extends interface 扩展
interface Name {
  name: string;
}

interface User3 extends Name {
  age: number;
}

type Name2 = {
  name: string;
};

type User4 = Name2 & { age: number };

let user5: User3 = {
  name: "xiaoming",
  age: 18,
};

区别

1:type可以声明类型别名,等号右边为设置为数据类型,interface不可以使用此用法


//type可以创建 类型别名 interface不行
type Name3 = string;

// 错误
// interface Name4 = string

// type 可以声明元祖类型 interface不行
type Coordinates = [number, number];

// 错误
// interface Coordinates2 = [number, number]

2:type不可以重复定义,interface可以重复定义,并且会取两次定义的合集


// 重复定义 type会报错, interface会联合两者
// type User5 = {
//   name : string
// }

// type User5 = {
//   age : number
// }

interface User6 {
  name: string;
}

interface User6 {
  age: number;
}

const user6: User6 = {
  name: "xiaoming",
  age: 18,
};

如何选择采用type还是interface

优先选择interface,当interface满足不了条件时,才使用type类型别名