接口和类型别名核心都是用来定义类型,是 TS 最常用的类型定义方式。相同点:都能描述对象、函数结构,支持泛型、扩展,也能被类实现。不同点很关键:接口支持重复声明自动合并,类型别名不行;类型别名更全能,能定义基础类型、联合 / 交叉类型、元组,接口只能定义对象 / 函数结构。接口侧重面向对象的规范定义,适合业务实体、组件规范;类型别名侧重灵活的类型组合,适合复杂类型简化。日常开发,定义对象结构优先用接口,复杂类型组合用类型别名即可。
类型别名就是给复杂类型起一个简洁的名字,核心作用是简化写法、复用类型、规范代码。它能把冗长的联合类型、交叉类型、函数类型、嵌套对象类型,封装成一个简短名称,避免重复手写。优化代码结构的效果很明显:统一项目中的类型规范,多处复用减少冗余代码;拆分大型复杂类型,让类型模块化、易维护;配合高级类型生成工具类型,让动态类型逻辑更清晰。它让代码可读性大幅提升,团队协作时不用反复理解复杂类型,降低维护成本,避免类型混乱引发的错误。
抽象类和接口都是定义规范的工具,核心区别很大。抽象类用abstract声明,可以包含具体实现、属性状态,一个类只能继承一个抽象类;接口无任何具体实现,不能存状态,一个类可以实现多个接口。抽象类有构造函数,支持所有访问修饰符;接口没有构造函数,成员默认 public。抽象类用于抽取相关类的共性,是“类的模板”;接口用于定义跨类的通用规范,不限制类的层级关系。简单说:相关类用抽象类,无关类共用规范用接口。
TS 有四种访问修饰符:public(默认,全局可访问)、private(仅当前类内部可访问)、protected(类内部 + 子类可访问)、readonly(只读,不可修改)。它们是面向对象封装的核心,严格控制类成员的访问权限:隐藏类的内部实现细节,只暴露必要的公共方法;阻止外部随意修改内部属性,保证数据安全;降低代码耦合度,修改内部逻辑不会影响外部调用。合理使用修饰符,能让类的职责更清晰,代码更健壮,从语法层面杜绝非法访问,完美实现封装特性。
TS 有两种实现私有成员的方式,推荐用ES 原生私有字段。第一种:TS 的private修饰符,仅编译时检查,编译成 JS 后会暴露,不安全。第二种:ES6 的#私有字段语法,运行时真正私有,外部绝对无法访问、修改,子类也不能继承。使用时直接在属性 / 方法名前加#,比如class User { #name: string; #say() {} }。这种方式完全符合封装原则,保护类的内部数据不被外部篡改,是实现私有成员的标准方案,比 TS 的 private 修饰符更可靠。
Mixin 是解决 TS不支持多类继承的方案,能把多个独立类的功能合并到一个类中。使用方法:编写混入函数,接收基类作为参数,返回扩展了功能的新类,目标类继承这个混合后的类。好处非常实用:打破单继承限制,轻松复用多个类的功能;把独立功能(如日志、缓存、事件)拆分成小 Mixin,代码模块化;不破坏原有继承关系,灵活组合功能;比继承更轻量,适合跨类的通用功能复用,让代码扩展性和复用性大幅提升。
多态和复用是面向对象的核心,TS 实现起来很简单。多态:两种方式,一是抽象类定义抽象方法,子类重写实现,同一方法呈现不同逻辑;二是接口定义规范,多个类实现接口,调用同一方法执行不同逻辑。代码复用:用继承抽取父类共性,复用属性和方法;用 Mixin 混合多个功能;用泛型编写通用组件;用工具函数、类型别名复用逻辑和类型。多态让代码更易扩展,新增功能不用改原有代码;复用减少冗余代码,两者结合,让代码简洁、灵活、易维护,完美适配复杂业务开发。