Продвинутый Typescript

Теория: Защита свойств и методов

В некоторых случаях свойства и методы в классе создаются только для внутреннего использования. Разработчики не хотят давать возможность вызывать их снаружи, иначе их случайно могут начать использовать, что не планировалось.

В языках с классами принято разделять свойства на публичные, приватные и защищенные. Первые доступны для всех, вторые могут использоваться только внутри класса, а третьи — внутри класса и в его наследниках. В этом уроке разберем каждый из этих видов.

Публичные свойства

По умолчанию в TypeScript все свойства публичные. Это можно обозначить явно с помощью ключевого слова public:

class Point {
  public x: number

  public y: number

  constructor(x: number, y: number) {
    this.x = x
    this.y = y
  }

  public someMethod() {
    // some logic
  }
}

Приватные свойства

Также свойства можно сделать приватными. Тогда пропадет возможность обращаться к ним снаружи напрямую:

class Point {
  private x: number

  private y: number

  constructor(x: number, y: number) {
    this.x = x
    this.y = y
  }
}

const p = new Point(10, 8)
p.x // Property 'x' is private and only accessible within class 'Point'.
p.y // Property 'y' is private and only accessible within class 'Point'.

Защищенные свойства

Наконец, свойства можно сделать защищенными. Это значит, что они доступны внутри класса и в наследниках:

class Point {
  protected x: number

  protected y: number

  constructor(x: number, y: number) {
    this.x = x
    this.y = y
  }
}

class Point3D extends Point {
  protected z: number

  constructor(x: number, y: number, z: number) {
    super(x, y)
    this.z = z
  }

  public getCoordinates() {
    return [this.x, this.y, this.z] // OK
  }
}

const p = new Point3D(10, 8, 5)
p.x // Property 'x' is protected and only accessible within class 'Point' and its subclasses.
p.y //  Property 'y' is protected and only accessible within class 'Point' and its subclasses.
p.z // Property 'z' is protected and only accessible within class 'Point3D' and its subclasses.

Рекомендуемые программы