В TypeScript модификатор доступа public является значением по умолчанию для всех свойств и методов класса. Это означает, что если вы не укажете модификатор явно, член класса будет считаться публичным.
Члены класса с модификатором public доступны отовсюду: внутри самого класса, в его наследниках (подклассах) и снаружи через экземпляр класса. Несмотря на то, что указывать его необязательно, явное написание public часто используется для улучшения читаемости кода и явного обозначения намерений разработчика («этот метод предназначен для внешнего использования»).
В этом уроке мы закрепим синтаксис объявления публичных полей и методов, а также разберемся, как к ним обращаться в различных контекстах.
- Модуль 1: Введение в TypeScript
- Модуль 2: Примитивные типы
- Модуль 3: Специальные типы
- Модуль 4: Массивы
- Модуль 5: Кортежи (Tuples)
- Модуль 6: Объекты
- Модуль 7: Функции
- Модуль 8: Union типы
- Модуль 9: Литеральные типы
- Модуль 10: Type Aliases
- Модуль 11: Интерфейсы
- Модуль 12: Type Guards и Narrowing
- Модуль 13: Enums
- Модуль 14: Классы
- Модуль 15: Generics — основы
- Модуль 16: Generics — ограничения
- Модуль 17: Utility Types — базовые
- Модуль 18: Utility Types — работа с Union
- Модуль 19: Utility Types — функции
- Модуль 20: Type Assertions
- Модуль 21: Keyof и Typeof операторы
- Модуль 22: Mapped Types
- Модуль 23: Conditional Types
- Модуль 24: Discriminated Unions
- Модуль 25: Модули и типы
- Модуль 26: Declaration Files
- Модуль 27: Типизация асинхронного кода
- Модуль 28: Практические паттерны
1. Явное объявление
В этом задании вам нужно дополнить код класса 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());2. Доступ к свойствам
В данном задании представлен фрагмент кода на 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. Синтаксис модификатора
В приведённом фрагменте кода TypeScript допущена ошибка в синтаксисе модификатора доступа public. Найдите и исправьте строку с ошибкой, чтобы класс Person мог быть скомпилирован и корректно использовался.
class Person { name public: string; constructor(name: string) { this.name = name; }}4. Публичный интерфейс класса
Из предложенных строк соберите корректное определение класса 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';5. Что выведет этот код?
Проанализируйте представленный код на 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?
Перед вами несколько примеров обращений к полям класса в TypeScript. Распределите их по категориям «Доступно» и «Недоступно» в зависимости от того, разрешены ли они для public модификатора. Обратите внимание, что public члены доступны из любого места: внутри класса, в наследниках и через экземпляры. Private члены, напротив, имеют ограниченную область видимости. Каждый элемент нужно перетащить в соответствующую категорию.
this.publicField; // внутри классаthis.privateField; // внутри классаinstance.publicField; // вне класса, через экземплярinstance.privateField; // вне класса, через экземплярderived.publicField; // в наследнике, через экземпляр наследникаderived.privateField; // в наследнике, через экземпляр наследника7. Поиск публичных членов
В приведённом коде класса 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;
}
}