前言
type 和 interface 都可以声明 TS 类型。
type Point1 = {
x: number;
y: number;
};
interface Point2 {
x: number;
y: number;
};
它们两个声明这个对象类型有任何区别吗?很明显没有,我认为最能区分它们两个的标志是,type 有一个 = 赋值等号。
type
type 可以做类型运算,例如 TS 工具类型:
type Partial<T> = { [P in keyof T]?: T[P] | undefined; }
经过一系列 TS 类型运算,返回的结果赋值给 type 关键字声明的名称 Partial。TS 的工具类型都是由 type 关键字声明的。
type 可以声明联合类型、基本类型(string、boolean、number)、对象类型(Object、Function、Map 等)。
interface
下面是 interface 关键字的原文解释:
An interface declaration is another way to name an object type.
仔细品味,interface 关键字是另一种声明对象类型的方式。