代码之家  ›  专栏  ›  技术社区  ›  Sean Allred

我可以声明一个属性设置一个后备字段吗?

  •  0
  • Sean Allred  · 技术社区  · 6 年前

    this._size this.__size Size | undefined Size return this.__size 说有一个类型不匹配 . 我可以断言类型为 return this.__size!; ,但如果可能的话,我想避免这样做(公司风格的指导原则)。

    class Shape {
      private __size?: Size;
      protected get _size(): Size {
        if (!this.__size)
        {
          this._size = this.onCalculateSize(); // returns `Size`
        }
        return this.__size;
      }
      protected set _size(value: Size)
      {
        this.__size = value;
        this.onSizeChanged();
      }
      protected onSizeChanged(): void { }
      protected onCalculateSize(): Size { return new Size(...); }
    }
    

    onCalculateSize 允许子类在不修改属性逻辑的情况下拥有自己的实现。

    0 回复  |  直到 6 年前