interface
和 type
都用于定义自定义的类型
interface
只能用来描述对象类型type
可以描述任何类型组合type
后边需要有=
interface Person {
name: string;
age: number;
}
type PersonType = {
name: string;
age: number;
};
interface
时,它们会自动合并为一个接口。同名属性的不能进行类型覆盖修改,否则编译不通过type
不支持声明合并,一个作用域内不允许有多个同名type
interface Foo {
name: string;
}
interface Foo {
age: number;
}
const foo: Foo = {
name: "John",
age: 25,
};
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...");
}
}