接口与类型别名
接口(interface)和类型别名(type)是 TS 组织数据结构的主要工具,两者大部分场景可以互换。
interface 接口
描述对象的形状:有哪些属性、各是什么类型。可以继承(extends)、合并。
type 类型别名
给类型起别名,能表达联合类型、交叉类型、字面量类型等 interface 表达不了的东西。
区别
- interface 可 extends、可重复声明合并;type 不行
- type 可做联合类型 string | number、字面量 "a" | "b"
- 对象形状优先用 interface,复杂组合用 type
代码示例
// 接口
interface User {
id: number;
name: string;
age?: number; // 可选属性
readonly email: string; // 只读
}
interface Admin extends User {
permissions: string[];
}
// 类型别名
type ID = string | number;
type Status = "active" | "disabled";
type Point = { x: number; y: number };
function getUser(id: ID): Admin {
return { id, name: "admin", email: "a@b.c", permissions: ["all"] };
}