ts 中 type 和 interface的区别

相同点

  1. 都可以描述一个对象或者函数
  • interface
interface User {
  name: string
  age: number
}

interface SetUser {
  (name: string, age: number): void;
}
  • ts
type User = {
  name: string
  age: number
};

type SetUser = (name: string, age: number) => void;
  1. 都允许拓展(extends) interface 和 type 都可以拓展,并且两者并不是相互独立的,也就是说 interface 可以 extends type, type 也可以 extends interface 。

差异点

  • type
    • type 可以声明基本类型别名,联合类型,元组等类型
    • type 语句中还可以使用 typeof 获取实例的 类型进行赋值
    • 其他骚操作
type StringOrNumber = string | number;
type Text = string | { text: string };
type NameLookup = Dictionary<string, Person>;
type Callback<T> = (data: T) => void;
type Pair<T> = [T, T];
type Coordinates = Pair<number>;
type Tree<T> = T | { left: Tree<T>, right: Tree<T> };
  • interface
    • interface 能够声明合并
interface User {
  name: string
  age: number
}

interface User {
  sex: string
}

/*
User 接口为 {
  name: string
  age: number
  sex: string 
}
*/

一般来说,如果不清楚什么时候用interface/type,能用 interface 实现,就用 interface , 如果不能就用 type 。