Interface 和 Type 核心的区别是 Type 不可在定义后重新添加内容,而 Interface 则总是可以扩展新内容。相比 Interface,Type 并没有实际创建一个新的类型,而是创建一个引用某个类型的名字。
如果有复杂的类型运算,那么没有其他选择只能使用 type;一般情况下,interface 灵活性比较高,便于扩充类型或自动合并,建议优先使用。
type Age = number;
type Result = "success" | "failure";
type Res = {
data: any;
status: number;
};
interface Person {
name: string;
age: number;
}
interface Shape {
color: string;
}
interface Circle extends Shape {
radius: number;
}
// Error: An interface can only extend an identifier/qualified-name with optional type arguments.
// type round extends Shape {
// radius: number;
// };
type round = Shape& {
radius: number;
};
interface Person {
name: string;
}
interface Person {
age: number;
}
const person: Person = {
name: "Alice",
age: 25,
};
// Error: Duplicate identifier 'Person'.
// type Person = {
// age: number;
// };
type CustomNumber = number & { positive: boolean };