Модификатор public

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

Тренажер по TypeScript

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

Члены класса с модификатором public доступны отовсюду: внутри самого класса, в его наследниках (подклассах) и снаружи через экземпляр класса. Несмотря на то, что указывать его необязательно, явное написание public часто используется для улучшения читаемости кода и явного обозначения намерений разработчика («этот метод предназначен для внешнего использования»).

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

Список тем

1. Явное объявление

id: 40700_public_01_replace

В этом задании вам нужно дополнить код класса User, явно указав модификатор доступа public для свойства name и метода getName. В TypeScript члены класса по умолчанию являются public, но для соблюдения определённого код-стайла и явного указания намерений иногда требуется явное объявление. Заполните пропуски в коде, чтобы он соответствовал требованиям стиля и оставался рабочим.

Заполните пропуски
class User {
    input1S name: string;

    constructor(name: string) {
        this.name = name;
    }

    input2S getName(): string {
        return this.name;
    }
}

const user = new User('Alice');
console.log(user.getName());
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Доступ к свойствам

id: 40700_public_02_select

В данном задании представлен фрагмент кода на TypeScript, в котором создается экземпляр класса Person с public-свойствами name и age. В коде есть пропуски, обозначенные как input1, input2 и input3. Вам необходимо выбрать из выпадающего списка правильные имена свойств, чтобы корректно обратиться к ним через точку для вывода имени, изменения возраста и вывода измененного возраста. Обратите внимание, что public-свойства доступны напрямую через экземпляр класса.

Нужно правильно расставить в пропуски предложенные варианты
class Person {
  public name: string;
  public age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

const person = new Person('Alice', 30);
console.log(person.input1S); // Вывод имени
person.input2S = 31; // Изменение возраста
console.log(person.input3S); // Вывод измененного возраста
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Синтаксис модификатора

id: 40700_public_03_error

В приведённом фрагменте кода TypeScript допущена ошибка в синтаксисе модификатора доступа public. Найдите и исправьте строку с ошибкой, чтобы класс Person мог быть скомпилирован и корректно использовался.

Найдите ошибку и исправьте
class Person {
    name public: string;
    constructor(name: string) {
        this.name = name;
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Публичный интерфейс класса

id: 40700_public_04_build

Из предложенных строк соберите корректное определение класса Car на TypeScript. Класс должен иметь публичное свойство model (тип string) и публичный метод drive(), который выводит в консоль сообщение 'Driving'. Учтите, что некоторые строки являются лишними и не должны входить в итоговое решение. Правильный порядок строк обеспечит корректную структуру класса.

Перетяните в правильном порядке строки из одного блока в другой
class Car {
    public model: string;
    public drive(): void {
        console.log('Driving');
    }
}
    private color: string;
    public stop(): void {
        console.log('Stopping');
    }
    model = 'Toyota';
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Что выведет этот код?

id: 40700_public_05_predict

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

Выберите правильный вариант ответа
class Calculator {
    public add(a: number, b: number): number {
        return a + b;
    }
}

const calc = new Calculator();
console.log(calc.add(7, 3));
Сообщения
Проверить
Показать подсказку

6. Где доступен Public?

id: 40700_public_06_sort

Перед вами несколько примеров обращений к полям класса в TypeScript. Распределите их по категориям «Доступно» и «Недоступно» в зависимости от того, разрешены ли они для public модификатора. Обратите внимание, что public члены доступны из любого места: внутри класса, в наследниках и через экземпляры. Private члены, напротив, имеют ограниченную область видимости. Каждый элемент нужно перетащить в соответствующую категорию.

Перетяните элементы в соответствующие блоки
Доступно
Недоступно
this.publicField; // внутри класса
this.privateField; // внутри класса
instance.publicField; // вне класса, через экземпляр
instance.privateField; // вне класса, через экземпляр
derived.publicField; // в наследнике, через экземпляр наследника
derived.privateField; // в наследнике, через экземпляр наследника
Сообщения
Проверить
Показать подсказку

7. Поиск публичных членов

id: 40700_public_07_highlight

В приведённом коде класса TypeScript найдите все свойства и методы, которые явно помечены как public. Для каждого выделенного фрагмента укажите, является ли он явно публичным членом класса или нет. Обратите внимание, что члены без модификатора доступа по умолчанию являются публичными, но в этом задании нужно выделять только те, перед которыми явно указано ключевое слово public.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
class User {
  {{public~|~t1}} {{username~|~t2}}: string;
  {{private~|~t3}} {{password~|~t4}}: string;
  {{public~|~t5}} {{email~|~t6}}: string;
  {{role~|~t7}}: string = 'user';

  {{public~|~t8}} {{getInfo~|~t9}}(): string {
    return `${this.username} - ${this.email}`;
  }

  {{private~|~t10}} {{validate~|~t11}}(): boolean {
    return this.password.length > 0;
  }

  {{public~|~t12}} {{setEmail~|~t13}}(newEmail: string): void {
    this.email = newEmail;
  }
}
Явно публичный член
Другой модификатор или отсутствие явного public
Сообщения
Проверить
Показать подсказку

TypeScript: компиляция и запуск

id: 40700_compiler

Модификатор public в TypeScript — это «открытая дверь» вашего класса: такие свойства и методы доступны из любого места программы. По умолчанию в TS все члены класса являются публичными, но явное указание public делает ваш код более читаемым и профессиональным. Попробуйте изменить имя питомца или его возраст прямо через объект, добавьте новый публичный метод для подачи голоса и посмотрите, как работает сокращенная запись свойств в конструкторе. Экспериментируйте: что будет, если вы попытаетесь изменить данные на некорректные?

TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру