TS中 interface 与 type 区别

82 阅读1分钟

1. interface可以继承而type不行

interface IBaseItems<T> {
  ids: T[];
}
interface ISearchItems extends IBaseItems<number> {
  type: RecentSearchTypes;
  hasMore: boolean;
}
interface IRecentItems extends IBaseItems<number | string> {
  types: RecentSearchTypes[];
}

2. interface可自动merge,type则不能

// interface 会自动merge
interface A {
    name: string;
}
interface A {
    age: number;
}

type B = {
    name: string;
}
type B = { //报错
    age: number;
}

3. interface 只能给对象指定类型,type 不仅可以给对象定义,还可以给任意类型定义

image.png

interface Person {
  name: string;
  age: number;
  sayHi(): void;
}

interface NumStr = number |string ;

type PersonType = {
  name: string;
  age: number;
  sayHi(): void;
};

type NumStrType = number |string ;