Можно ли типизировать класс по именам методов?

Да, в TypeScript вы можете типизировать классы не только по их полям и свойствам, но и по именам и сигнатурам их методов. Это называется "типизация по именам методов" или "типизация по контракту".

Чтобы типизировать класс по именам методов, вы можете использовать концепцию интерфейса, который определяет имена и сигнатуры методов, которые должны присутствовать в классе.

Примерно так должно выглядеть описание интерфейса:

interface MyInterface {
  methodName: (param1: Type1, param2: Type2) => ReturnType;
  // ... дополнительные имена методов
}

Вышеуказанный интерфейс определяет, что класс, реализующий этот интерфейс, должен иметь метод с именем methodName, который принимает параметры типов Type1 и Type2, и возвращает значение типа ReturnType. Вы можете добавить дополнительные имена методов аналогичным образом.

Затем, чтобы класс типизировался по именам методов, вам необходимо реализовать интерфейс в классе:

class MyClass implements MyInterface {
  methodName(param1: Type1, param2: Type2): ReturnType {
    // ... реализация метода
  }
  // ... реализации других методов интерфейса
}

В этом примере MyClass реализует интерфейс MyInterface и предоставляет реализацию метода methodName, соответствующую сигнатуре, указанной в интерфейсе.

Таким образом, при использовании класса MyClass вы можете ожидать, что он будет иметь метод с именем methodName с определенной сигнатурой. Это обеспечивает статическую проверку типов и упрощает разработку, исключая возможность использования методов, которых в классе нет.

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