TypeScript 中的 Getter 和 Setter

118 阅读2分钟

TypeScript 是 JavaScript 的超集,引入了静态类型,在开发过程中能更好地捕获潜在的错误。此外,TypeScript 还引入了类似于其他面向对象编程语言的特性,如 Getter 和 Setter。本文将讨论 TypeScript 中的 Getter 和 Setter,以及如何使用它们来更好地控制类的属性。

1. 什么是 Getter 和 Setter?

Getter 和 Setter 是一种用于访问和修改类属性的方法。Getter 用于获取属性的值,Setter 用于设置属性的值。通过这种方式,可以在属性的读取和赋值过程中执行额外的逻辑。

2. 使用 Getter

下面是一个使用 Getter 的例子:


class Circle {

    private _radius: number;

  


    constructor(radius: number) {

        this._radius = radius;

    }

  


    get radius(): number {

        return this._radius;

    }

  


    get area(): number {

        return Math.PI * this._radius ** 2;

    }

}

  


const myCircle = new Circle(5);

console.log(myCircle.radius); // 输出:5

console.log(myCircle.area);   // 输出:78.53981633974483

在这个例子中,定义了一个 Circle 类,它有一个私有属性 _radius。通过 get 关键字创建了两个 Getter,radius 和 area。 调用 Getter 方法使得我们可以像访问属性一样访问它们。

3. 使用 Setter

下面是一个使用 Setter 的例子:


class Rectangle {

    private _width: number;

    private _height: number;

  


    constructor(width: number, height: number) {

        this._width = width;

        this._height = height;

    }

  


    get area(): number {

        return this._width * this._height;

    }

  


    set width(newWidth: number) {

        if (newWidth > 0) {

            this._width = newWidth;

        }

    }

  


    set height(newHeight: number) {

        if (newHeight > 0) {

            this._height = newHeight;

        }

    }

}

  


const myRectangle = new Rectangle(4, 5);

console.log(myRectangle.area); // 输出:20

  


myRectangle.width = 8; // 设置宽度

myRectangle.height = 6; // 设置高度

  


console.log(myRectangle.area); // 输出:48

在这个例子中,定义了一个 Rectangle 类,它有私有属性 _width 和 _height。使用 set 关键字创建了两个 Setter,width 和 height, 这使得我们可以通过属性赋值来修改它们,但在 Setter 中我们添加了条件,确保宽度和高度始终大于零。

4. 为什么使用 Getter 和 Setter?

使用 Getter 和 Setter 有助于控制属性的访问和修改过程。这在以下情况下特别有用:

  1. 数据验证和过滤: 你可以在 Setter 中添加验证逻辑,以确保属性的值符合一定规则。

  2. 计算属性: 你可以使用 Getter 来计算和返回属性的值,而不必存储在对象中。

  3. 封装: 你可以将属性隐藏在内部,只暴露 Getter 和 Setter,从而提供更好的封装。

5. 总结

在 TypeScript 中,Getter 和 Setter 用于控制属性的读取和修改,它们允许添加额外的逻辑以满足项目需求,同时保持代码的清晰性和可维护性。

希望本文对您有所帮助!