0%

Type与Interface区别

Type与Interface区别

可以在extend或Implements子句中命名接口,但是不能为对象类型文字提供类型别名。
一个接口可以具有多个合并的声明,但是对象类型文字的类型别名不能。

type可以用于其它类型(联合类型、元组类型、基本类型[原始值]),interface不支持

Type不同点

1
2
3
4
5
6
7
8
9
10
11
type PartialPointX = { x: number };
type PartialPointY = { y: number };
// union(联合)
type PartialPoint = PartialPointX | PartialPointY;
// tuple(元祖)
type Data = [PartialPointX, PartialPointY];
// primitive(原始值)
type Name = Number;
// typeof的返回值
let div = document.createElement('div');
type B = typeof div;

type能使用in关键字生成映射类型, 但interface不行

1
2
3
4
5
6
7
8
type Keys = 'firstname' | 'surname'
type DudeType = {
[key in Keys]: string
}
const test: DudeType = {
firstname: 'Lee sin',
surname: 'jinx'
}

Interface不同点

interface可以多次定义,并被视为合并所有声明成员 type不支持

1
2
3
4
5
6
7
interface Point {
x: number;
}
interface Point {
y: number;
}
const point: Point = {x: 1, y: 2};

相同点

  • 都可以描述一个对象或者函数
  • 都可以进行拓展

欢迎关注我的其它发布渠道