Как подружить тип/интерфейс с классом в TS?

В TypeScript Вы можете подружить тип или интерфейс с классом, используя синтаксис объединения типов. Это позволяет определить тип для экземпляров класса, а также статические члены класса и конструктор.

Для начала рассмотрим пример определения интерфейса и класса:

interface Foo {
  bar: string;
}

class MyClass {
  constructor(public bar: string) {}
}

В этом примере мы определяем интерфейс Foo, который имеет только одно свойство bar типа string. Затем у нас есть класс MyClass, который также имеет свойство bar, которое мы также определяем в его конструкторе.

Теперь мы можем подружить интерфейс Foo с классом MyClass, используя объединение типов:

class MyClass implements Foo {
  constructor(public bar: string) {}
}

Этот код говорит TypeScript, что класс MyClass реализует интерфейс Foo, и поэтому должен иметь свойство bar типа string. Это означает, что мы можем использовать MyClass там, где ожидается значение типа Foo.

Если Вы хотите подружить тип с классом, можно использовать наследование:

type MyType = {
  bar: string;
};

class MyClass implements MyType {
  constructor(public bar: string) {}
}

В этом примере мы определили тип MyType, который имеет свойство bar типа string. Затем мы объявили класс MyClass, который наследует этот тип, указав свойство bar в его конструкторе.

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