总结

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 };