前言

如果 type 和 interface 都可以使用的时候,应该怎么使用?
一般情况下,如果和对象相关的,会使用 interface ,不和对象相关使用 type。

区别

概念不同

type 指的是类型别名,是 ts 高级类型 的一种。而 interface 指的是 接口

范围不同

type 适用于基础类型,但 interface 不适用。比如

  1. type A = string;

是否会创建新的类型

interface 是会创建一个新的类型的,但 type 不会,type 只是创建类型别名,不会创建新的类型。

组合方式不同

type 和 interface 都可以进行类型的组合使用,但是组合的方式不同。
interface 使用继承来实现组合,type 使用交叉类型来进行组合。

  1. // interface
  2. interface B {
  3. b: string
  4. }
  5. interface A extends B {
  6. a: string
  7. }
  8. const a: A = {
  9. a: "123",
  10. b: "456"
  11. }
  1. // type
  2. type B = {
  3. b: string
  4. }
  5. type A = {
  6. a: string
  7. } & B
  8. const a: A = {
  9. a: "123",
  10. b: "456"
  11. }

是否能重复声明不同

interface 可以重复声明,而且重复声明会进行叠加。但 type 不能重复声明,只能声明一次。

  1. interface A {
  2. a: string
  3. }
  4. interface A {
  5. aa: string
  6. }
  7. const a: A = {
  8. a: "hi",
  9. aa: "hi"
  10. }
  1. type A = {
  2. a: string
  3. }
  4. type A = {
  5. aa: string
  6. } // 报错 Duplicate identifier 'A'