主题
TypeScript 里的 type 和 interface 区别
1. 语法不同
ts
interface Point {
x: number;
y: number;
}
type Point = {
x: number;
y: number;
};
interface setPoint {
(x: number, y: number): void;
}
type setPoint2 = (x: number, y: number) => void;
2. interface 可以定义多次,并将被视为单个接口
ts
interface Point {
x: number;
}
interface Point {
y: number;
}
var p: Point = {
x: 1,
y: 2
};
而 type 重复定义会报错
ts
type Point = {
x: number;
};
type Point = {
y: number;
};
3. extends 写法不同, 但是可以互相扩展
- interface extends interface
ts
interface PointX {
pointX: 0;
}
interface PointY extends PointX {
pointY: 0;
}
const p: PointY = {
pointX: 0,
pointY: 0
};
- type extends type
ts
type PointX = {
pointX: 0;
};
type PointY = PointX & {
pointY: 0;
};
const p: PointY = {
pointX: 0,
pointY: 0
};
- Interface extends type
ts
type PointX = {
pointX: 0;
};
interface PointY extends PointX {
pointY: 0;
}
const p: PointY = {
pointX: 0,
pointY: 0
};
- type extends interface
ts
interface PointX {
pointX: 0;
}
type PointY = PointX & {
pointY: 0;
};
const p: PointY = {
pointX: 0,
pointY: 0
};
4. Type 可以用于更多的类型
ts
// primitive
type N = string;
// object
type ObjA = { a: number };
type ObjB = { b: number };
// union
type UnionObj = ObjA | ObjB;
// tuple
type Arr = [number, string];
// dom
var div = document.creatElement("div");
type Div = div;
5.Type 可以计算属性,生成映射类型
ts
type Keys = "a" | "b";
type Obj = {
[key in Keys]: number;
};
var obj: Obj = {
a: 1,
b: 2
};
// error
interface Obj2 {
[key in Keys]: number;
}