MST

星途 面试题库

面试题:TypeScript类访问修饰符在复杂业务逻辑架构下的优化策略

在一个具有复杂业务逻辑的大型前端项目架构中,类的继承关系和依赖关系错综复杂。请详细说明如何利用TypeScript的访问修饰符来优化这种复杂架构,避免潜在的代码漏洞和逻辑混乱。例如,在多层继承和多重依赖的情况下,如何通过合理设置访问修饰符来确保数据的安全性和业务逻辑的正确性,给出具体的架构设计思路和代码示例。
13.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

架构设计思路

  1. 公有成员(public):适用于需要在类的外部访问和调用的方法和属性。例如,一些通用的工具方法,在项目的多个地方可能都会用到,就可以设置为 public
  2. 私有成员(private):用于那些不希望在类的外部直接访问的属性和方法。在复杂架构中,可能存在一些只与类内部逻辑相关的数据和操作,比如某些中间计算过程的变量,设置为 private 可以防止外部误操作,保证数据安全性。
  3. 受保护成员(protected):在多层继承场景下非常有用。当一个类的某些属性或方法希望能被其子类访问,但不希望在类外部直接访问时,可设置为 protected。例如,父类中有一些基础的业务逻辑处理方法,子类可能需要基于这些方法进行扩展,将这些方法设为 protected 就可以满足需求。

代码示例

// 基类
class BaseComponent {
    // 公有属性
    public commonData: string;
    // 受保护属性
    protected internalData: number;
    // 私有属性
    private secretData: boolean;

    constructor(common: string, internal: number, secret: boolean) {
        this.commonData = common;
        this.internalData = internal;
        this.secretData = secret;
    }

    // 公有方法
    public publicMethod(): void {
        console.log('This is a public method, data:', this.commonData);
    }

    // 受保护方法
    protected protectedMethod(): void {
        console.log('This is a protected method, internal data:', this.internalData);
    }

    // 私有方法
    private privateMethod(): void {
        console.log('This is a private method, secret data:', this.secretData);
    }

    // 公有方法调用私有方法
    public callPrivateMethod(): void {
        this.privateMethod();
    }
}

// 子类继承自BaseComponent
class SubComponent extends BaseComponent {
    constructor(common: string, internal: number, secret: boolean) {
        super(common, internal, secret);
    }

    // 子类重写父类的受保护方法
    protected protectedMethod(): void {
        super.protectedMethod();
        console.log('Extended protected method in SubComponent');
    }

    // 子类调用父类的受保护方法
    public callProtectedMethod(): void {
        this.protectedMethod();
    }
}

// 创建BaseComponent实例
const base = new BaseComponent('common value', 10, true);
base.publicMethod();
// base.protectedMethod(); // 报错,无法在类外部访问protected方法
// base.privateMethod(); // 报错,无法在类外部访问private方法
base.callPrivateMethod();

// 创建SubComponent实例
const sub = new SubComponent('sub common value', 20, false);
sub.publicMethod();
sub.callProtectedMethod();
// sub.privateMethod(); // 报错,无法在类外部访问private方法

通过上述代码示例可以看到,利用 TypeScript 的访问修饰符,可以清晰地控制类成员的访问权限,从而在复杂的前端项目架构中优化代码结构,避免潜在的代码漏洞和逻辑混乱,保证数据的安全性和业务逻辑的正确性。