В этом модуле рассматриваем Static свойства и методы классов в TypeScript. В отличие от обычных свойств, статика принадлежит самому классу, а не его экземплярам. Это идеальный инструмент для создания утилит, счетчиков экземпляров или констант конфигурации.
Вы узнаете:
- Как объявлять статические поля с помощью ключевого слова
static. - Как обращаться к ним внутри и снаружи класса.
- Чем они отличаются от полей экземпляра (
this).
Тренажер поможет вам закрепить синтаксис через написание кода, поиск ошибок и визуализацию работы классов. Разберитесь, как работает код, чтобы избежать распространенных ошибок при использовании this в статическом контексте.
- Модуль 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-кода, демонстрирующие использование статических свойств и методов в классе. Строки перемешаны. Восстановите их правильный порядок, чтобы получился корректный класс с объявлением статического поля, его инициализацией, созданием экземпляра и обращением к статическому свойству. Обратите внимание на порядок инициализации: объявление класса, объявление статического поля, инициализация статики, создание экземпляра, обращение к статике.
console.log(Counter.count); // обращение к статике}Counter.count = 0; // инициализация статического поляconst c1 = new Counter(); // создание экземпляра static count: number; // объявление статического поляclass Counter {2. Счетчик экземпляров
В этом задании вам предстоит реализовать класс, который подсчитывает количество созданных своих экземпляров. Для этого используйте статическое поле, которое увеличивается на единицу при каждом вызове конструктора. Класс должен называться Counter, а статическое поле - instanceCount. Впишите эти имена в указанные пропуски, чтобы код работал корректно.
class input1S {
static input2S = 0;
constructor() {
input1S.input2S++;
}
}
3. Доступ через экземпляр
Проанализируйте приведённый код TypeScript, в котором происходит попытка вызова статического метода через экземпляр класса. Выберите правильное описание ошибки, которую выдаст компилятор TypeScript при попытке компиляции этого кода.
class Calculator {
static add(a: number, b: number): number {
return a + b;
}
}
const result = new Calculator().add(5, 3);
console.log(result);4. Паттерн Singleton
Из предложенных строк соберите корректную реализацию паттерна Singleton на TypeScript. Класс должен иметь приватный конструктор, статическое поле для хранения единственного экземпляра и статический метод getInstance, возвращающий этот экземпляр. Игнорируйте лишние строки, которые нарушают принцип Singleton или содержат синтаксические ошибки.
class Singleton { private static instance: Singleton; private constructor() {} public static getInstance(): Singleton { if (!Singleton.instance) { Singleton.instance = new Singleton(); } return Singleton.instance; }} public constructor() {} private instance: Singleton; public static getInstance(): Singleton { return new Singleton(); }5. Static vs Instance
В левой колонке приведены характеристики членов класса TypeScript, а в правой — термины, описывающие тип члена (статический или экземплярный). Сопоставьте каждую характеристику с соответствующим термином. Обратите внимание, что в правой колонке нет лишних вариантов, и каждое описание соответствует ровно одному термину.
6. Ошибка контекста
В данном фрагменте кода TypeScript допущена ошибка, связанная с использованием контекста `this` в статическом методе. Статические методы принадлежат самому классу, а не его экземплярам, поэтому обращение к нестатическим свойствам через `this` внутри статического метода некорректно. Найдите строку с ошибкой и исправьте её, чтобы код стал рабочим.
class Settings { private props: Map<string, any> = new Map(); static getProp(key: string): any { return this.props.get(key); }}7. Модификаторы
В данном фрагменте кода TypeScript необходимо правильно расставить модификаторы доступа и ключевое слово `static` для поля `count` и метода `increment` класса `Counter`. Поле `count` должно быть приватным и статическим, а метод `increment` — публичным и статическим. Выберите для каждого пропуска подходящий вариант из выпадающего списка, чтобы код корректно компилировался и работал.
class Counter {
input1S input2S count = 0;
input3S input4S increment() {
return ++Counter.count;
}
}