typescript 中 type 和 interface 的区别

type 和 interface 的区别

interfacetype 都用于定义自定义的类型

  1. 使用范围

  • interface只能用来描述对象类型
  • type可以描述任何类型组合

  2. 语法差异

  • type后边需要有=
interface Person {
  name: string;
  age: number;
}

type PersonType = {
  name: string;
  age: number;
};

  3. 合并声明

  • 当多次使用相同名称定义一个 interface 时,它们会自动合并为一个接口。同名属性的不能进行类型覆盖修改,否则编译不通过
  • type不支持声明合并,一个作用域内不允许有多个同名type
interface Foo {
  name: string;
}

interface Foo {
  age: number;
}

const foo: Foo = {
  name: "John",
  age: 25,
};

  4. 实现和继承能力

  • interface 可以被类实现(implements)和其他接口继承(extends),而 type 不具备这些能力。
  • interface也可以继承自type,但是只能是对象结构,或多个对象组成的交叉类型&type
  • type可以通过&继承type或者interface得到交叉类型
interface Printable {
  print(): void;
}

class Book implements Printable {
  print() {
    console.log("Printing book...");
  }
}

interface Shape extends Printable {
  draw(): void;
}

class Circle implements Shape {
  print() {
    console.log("Printing circle...");
  }

  draw() {
    console.log("Drawing circle...");
  }
}

你可能感兴趣的:(typescript,javascript,开发语言)