Как типизировать подобный паттерн?

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

Одним из распространенных способов типизации подобного паттерна является использование обобщенных типов (generic types). Обобщенные типы позволяют создавать абстракции над типами данных, которые могут быть использованы в разных контекстах. Например, вы можете определить обобщенный тип для контейнера данных, который может содержать объекты определенного типа:

class Container<T> {
  private data: T;

  constructor(data: T) {
    this.data = data;
  }

  getData(): T {
    return this.data;
  }
}

// Пример использования контейнера данных
const container = new Container<string>("Привет, мир!");
const data = container.getData(); // Тип data будет string
console.log(data); // Выведет "Привет, мир!"

В данном примере мы определяем класс Container<T>, который принимает обобщенный тип T. Конструктор принимает значение типа T и сохраняет его в приватной переменной data. Метод getData() возвращает значение data типа T.

Вы также можете использовать обобщенные типы для определения интерфейсов или функций. Например:

interface Container<T> {
  data: T;
}

function getData<T>(container: Container<T>): T {
  return container.data;
}

// Пример использования функции getData()
const data = getData({ data: "Привет, мир!" }); // Тип data будет string
console.log(data); // Выведет "Привет, мир!"

В этом примере мы определяем интерфейс Container<T>, которое имеет поле data типа T. Затем мы определяем функцию getData<T>, которая принимает объект типа Container<T> и возвращает значение data из него.

Надеюсь, это помогло вам понять, как типизировать подобный паттерн в TypeScript. Однако, это только один из возможных подходов, и в зависимости от ваших конкретных требований, ситуации и стилей программирования, вы можете использовать и другие подходы к типизации.