# type vs interface

# type 和 interface 的相同点

对接口定义的两种不同形式,目的都是一样的,都是用来定义 对象 或者 函数 的形状

interface example {
  name: string;
  age: number;
}

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

type example = {
  name: string;
  age: number;
};
type example = (name: string, age: number) => void;

都支持继承,对于 interface 来说,继承是通过 extends 实现的,而 type 的话是通过 & 来实现的,也可以叫做 交叉类型

type exampleType1 = {
  name: string,
};
interface exampleInterface1 {
  name: string;
}

type exampleType2 = exampleType1 & {
  age: number,
};
type exampleType2 = exampleInterface1 & {
  age: number,
};

interface exampleInterface2 extends exampleType1 {
  age: number;
}
interface exampleInterface2 extends exampleInterface1 {
  age: number;
}

# type和interface的不同点

type可以做到,但interface不能做到的事情

  • type可以定义 基本类型的别名,如 type myString = string
  • type可以通过 typeof 操作符来定义,如 type myType = typeof someObj
  • type可以申明 联合类型,如 type unionType = myType1 | myType2
  • type可以申明 元组类型,如 type yuanzu = [myType1, myType2]

interface可以做到,但是type不可以做到的事情

interface可以 声明合并,但是type则表现为覆盖,始终只有最后一个type生效

interface test {
    name: string
}
interface test {
    age: number
}

/*
test实际为 {
    name: string
    age: number
}
*/
陕ICP备20004732号-3