В TypeScript есть удобный синтаксический сахар для инициализации свойств класса, называемый Parameter Properties (свойства параметров). Он позволяет объявлять и инициализировать поля класса прямо в аргументах конструктора, сокращая шаблонный код.
Вместо того чтобы объявлять поле в теле класса, принимать его в конструкторе и писать this.x = x, вы можете просто добавить модификатор доступа (public, private, protected или readonly) перед аргументом конструктора.
Пример:constructor(public name: string) {}
Это автоматически создаст публичное поле name и присвоит ему переданное значение.
- Модуль 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. Добавление модификатора
В TypeScript существует сокращенная инициализация свойств класса через конструктор. Для этого перед параметром конструктора нужно указать модификатор доступа (public, private или protected). В данном фрагменте кода один параметр уже имеет модификатор public, а второй — нет. Добавьте модификатор public перед вторым параметром, чтобы он также стал свойством класса. После этого код будет корректно компилироваться, и оба параметра станут свойствами класса.
class Person {
constructor(public name: string, input1S age: number) {
}
}2. Обычный vs Сокращенный
В левой колонке приведены описания способов инициализации полей класса в TypeScript, а в правой — фрагменты кода конструкторов. Сопоставьте каждое описание с соответствующим фрагментом кода. Обратите внимание на различия между классической инициализацией (с явным присваиванием через this) и сокращенной (parameter property).
constructor(public name: string) {}constructor(name: string, age: number) {
this.name = name;
this.age = age;
}constructor(name: string) {
this.name = name;
}constructor(public name: string, private age: number) {}3. Дублирование свойств
В данном фрагменте кода TypeScript допущена ошибка, связанная с дублированием объявления свойства класса. Свойство объявлено одновременно в теле класса и как parameter property в конструкторе, что приводит к ошибке компиляции. Найдите строку с избыточным объявлением и исправьте её, удалив дублирование, чтобы код стал корректным.
class Person { name: string; constructor(public name: string) { // Инициализация происходит автоматически } }4. Класс User
Из предложенных строк соберите корректный класс User на TypeScript, использующий сокращенную инициализацию в конструкторе для полей id (private) и name (public). Класс должен быть объявлен полностью, включая открывающую и закрывающую фигурные скобки. Лишние строки, не относящиеся к объявлению класса с сокращенной инициализацией, в решение включать не нужно.
class User { constructor(private id: number, public name: string) { }} private age: number; this.id = id;5. Какие станут свойствами?
Внимательно изучите код на TypeScript. В конструкторе класса Person есть четыре аргумента, но только два из них имеют модификаторы доступа. Отметьте кликом только те аргументы конструктора, которые станут свойствами класса. Не отмечайте аргументы без модификаторов, имя класса, ключевое слово constructor, скобки или другие элементы кода.
class Person {
constructor(
{{name: string~|~t1}},
{{public age: number~|~t2}},
{{private id: number~|~t3}},
{{city: string~|~t4}}
) {
// ...
}
}6. Жизненный цикл
В этом задании вам предстоит восстановить правильную последовательность этапов создания объекта в TypeScript при использовании parameter properties (сокращённой инициализации в конструкторе). Перед вами пять текстовых описаний шагов, которые перемешаны. Ваша задача — расставить их сверху вниз в том порядке, в котором они происходят в жизненном цикле создания объекта: начиная с вызова оператора new, заканчивая готовым объектом. Обратите внимание, что при parameter properties присвоение значений свойствам происходит автоматически до выполнения тела конструктора.
7. Видимость свойства
Рассмотрите код на TypeScript, в котором используется сокращенная инициализация свойства в конструкторе с модификатором доступа private. Затем вне класса происходит попытка обратиться к этому свойству. Что произойдет при попытке выполнить этот код в редакторе TypeScript (например, в VS Code)? Выберите верный вариант ответа.
class SecretHolder {
constructor(private secret: string) {}
public reveal(): string {
return this.secret;
}
}
const obj = new SecretHolder('confidential');
console.log(obj.secret); // Что произойдет здесь?