接口与类型别名

TypeScript 教程 · 第 4 章 · 8 次浏览

接口(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"] };
}