在TypeScript编写的Vue.js组件中应如何使用public、private等访问修饰符?
Vue 2.6 + TypeScript 类组件
访问修饰符使用说明 你当前的使用方式完全正确,是TypeScript类风格Vue组件开发的标准实践,不存在合理性问题。
合理性依据
- 访问修饰符是TypeScript原生语法特性,你所使用的
vue-property-decorator及底层依赖的vue-class-component,核心设计目标就是兼容TS类语法开发Vue组件,没有对TS原生语法做限制。官方文档未提及只是因为文档不会重复说明TS本身的语法规则,不代表不支持该用法。 - 访问修饰符的静态检查能力和IDE的代码分析适配性本身就是TS开发的核心优势之一,你使用Rider开发时,明确的访问修饰符可以帮IDE精准识别成员可访问范围,提前抛出模板误用私有成员、外部非法调用内部方法等错误,有效降低bug率。
现有写法符合通用规范
你当前的修饰符划分逻辑是行业通用的标准约定:
- 所有需要在模板中访问的属性、方法、getter、
@Prop修饰的入参、@Emit/@Action装饰的方法、生命周期钩子都声明为public:因为模板属于组件类的外部调用方,仅有权访问public成员 - 仅在组件脚本内部逻辑中使用的变量、方法声明为
private:符合TS访问控制的设计初衷,明确标记内部实现细节,避免外部意外调用。
通用规范参考
目前行业内Vue+TS类组件开发对访问修饰符的通用规范为:
- 所有对外暴露的成员(模板可访问、父组件可通过ref调用的成员)必须显式声明
public - 仅组件内部使用的实现细节必须声明为
private - 仅允许子类重写/访问的成员声明为
protected
补充说明:TS的private是编译期的静态约束,运行时依然可以访问到成员,但静态检查阶段已经可以拦截绝大多数误用场景,完全满足开发阶段的管控需求,你完全不需要省略访问修饰符的声明。
内容的提问来源于stack exchange,提问作者jasie
相关产品推荐
相关产品推荐

