接口与类型别名

二者都用于描述对象、函数、构造器等形状;TypeScript 类型系统整体偏结构化(structural):只要结构兼容即可赋值,不要求声明上显式 implements 中的 implements 是显式契约文档)。


interface

interface User {
  id: string
  name: string
  tags?: string[] // 可选属性
  readonly createdAt: number
}
  • 声明合并:同一作用域多个同名 interface合并(适合扩展第三方类型声明)。
  • extends:继承另一接口;可多继承 交叉需谨慎(同名属性须兼容)。
  • 可描述 函数与构造器 调用签名。

type 别名

type ID = string | number
type Handler = (ev: Event) => void
  • 联合 |、交叉 &枚举泛型高级类型(条件类型、映射等)多用 type 表达。
  • 不可声明合并:同名 type 重复会冲突。

交叉类型 &

将多个类型「合并」为需同时满足的形状。若同一属性冲突且不相容,会得到 never 属性(常提示设计问题)。


interfacetype 选型(经验)

场景更常用
对象开放扩展、声明合并interface
联合、映射、条件类型、元组别名type

团队可统一风格;一致性比教条重要。


索引签名

interface Dict {
  [key: string]: number
}

键类型须与 string / number / symbol 兼容;属性具体名与索引返回值类型需满足总体的「一致性」规则。


函数与构造器

  • 调用签名interface F { (x: number): string }
  • 构造签名new (...args: any[]) => SomeInstance 或与 abstract new 组合(见

相关链接