Модификаторы доступа в TypeScript

В этом уроке вы узнаете о модификаторах доступа в TypeScript.

Модификаторы доступа изменяют видимость свойств и методов класса. TypeScript предоставляет три модификатора доступа:

  • private
  • protected
  • public

Обратите внимание, что TypeScript логически управляет доступом во время компиляции, а не во время выполнения.

Частный модификатор

private ограничивает видимость только тем же классом. Когда вы добавляете модификатор private к свойству или методу, вы можете получить доступ к этому свойству или методу в том же классе. Любая попытка доступа к закрытым свойствам или методам вне класса приведет к ошибке во время компиляции.

В следующем примере показано, как использовать модификатор private для snn, firstName и lastName класса person :

class Person {
    private ssn: string;
    private firstName: string;
    private lastName: string;
    // ...
}

Как только свойство private установлено, вы можете получить доступ к свойству ssn в конструкторе или методах класса Person. Например:

class Person {
    private ssn: string;
    private firstName: string;
    private lastName: string;

    constructor(ssn: string, firstName: string, lastName: string) {
        this.ssn = ssn;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    getFullName(): string {
        return `${this.firstName} ${this.lastName}`; 
    }
}

Следующие попытки доступа к свойству ssn вне класса вызовут ошибку:

let person = new Person('153-07-3130', 'John', 'Doe');
console.log(person.ssn); // compile error

Публичный модификатор

Модификатор public позволяет сделать свойства и методы класса доступными из любого места. Если вы не укажете какой-либо модификатор доступа для свойств и методов, по умолчанию они будут использовать общедоступный модификатор.

Например, метод Person getFullName() класса Public имеет модификатор public. Следующий пример явно добавляет модификатор public к getFullName() :

class Person {
    // ...
    public getFullName(): string {
        return `${this.firstName} ${this.lastName}`; 
    }
    // ...
}

Это имеет тот же эффект, как если бы ключевое слово public было опущено.

Защищенный модификатор

Модификатор protected позволяет свойствам и методам класса быть доступными внутри одного класса и внутри подклассов.

Когда класс(дочерний класс) наследуется от другого класса (родительского класса), он является подклассом родительского класса.

Компилятор TypeScript выдаст ошибку, если вы попытаетесь получить доступ к защищенным свойствам или методам откуда-либо еще.

Чтобы добавить защищенный модификатор к свойству или методу, вы используете ключевое слово protected.

Пример:

class Person {

    protected ssn: string;
    
    // other code
}

Свойство ssn теперь защищено. Он будет доступен в классе Person и в любом классе, который наследуется от класса Person.

Класс Person объявляет два частных свойства и одно защищенное свойство. Его конструктор инициализирует эти свойства тремя аргументами.

Чтобы сделать код короче, TypeScript позволяет вам как объявлять свойства, так и инициализировать их в конструкторе следующим образом:

class Person {
    constructor(protected ssn: string, private firstName: string, private lastName: string) {
        this.ssn = ssn;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    getFullName(): string {
        return `${this.firstName} ${this.lastName}`;
    }
}

Когда вы рассматриваете видимость свойств и методов, рекомендуется начинать с наименее заметного модификатора доступа, который является закрытым.

Заключение

  • TypeScript предоставляет три модификатора доступа к свойствам и методам класса: private, protected и public.
  • private разрешает доступ в пределах одного класса.
  • Модификатор protected разрешает доступ в рамках одного и того же класса и подклассов.
  • Модификатор public разрешает доступ из любого места.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript