TypeScript vs Modules in Node.JS

Пытаюсь написать небольшой pet-project используя TypeScript. По ходу возникают вопросы.
В TypeScript Interface который несколько отличается от того интерфейса что в Java, который вроде бы должен определять “Interface”, а у них в примерах он без функций, но со свойствами…
Программа обычно делится на данные и алгоритмы, алгоритмы удобно часто представлять просто набором функций, как утилиты, в классах это можно сделать через static, в Node.JS уже есть модули, которые группируют функции, в таком случае классы кажутся избыточными. Если это данные то и объектов достаточно, не совсем понятно зачем классы, наследование структур данных тоже сомнительно, плюс наследование тоже своеобразное получается, притянутое к широким возможностям JavaScript.
И насколько я понял, например, async\await не работает с функцией в составе класса.
Вобщем типизирование с TypeScript выглядит нормально, а вот классовая система с функциональным языком должна уживаться понять не могу.
Может кто привести пример проекта на посмотреть или поделиться своим опытом с TypeScript на Node.JS?

Думай об интерфейсах, как о способе описать структуру джаваскриптового объекта или функции. Суть тайпскрипта - улучшить гарантии согласованности программы на этапе компиляции в js: все структуры (считай интерфейсы) получаемых и передаваемых данных согласованы.

В отличи от джавы, где структурная единица программы должна быть выражена в виде класса, в джаваскрипте (и как следствие в тайпскрипте) структурной единицей может быть как функция, так и класс (функция-конструктор). В джаве нет выбора кроме как описывать классы. В js и ts если можно описать решение в виде функции, то нужно использовать функцию, если тебе нужен объект с данными, используй просто объект (ни в коем случае не статические свойства, ибо это оверхед). Но иногда необходимы классы (для однородных или наследуемых объектов). И по возможности нужно решать задачу с помощью функции, а не класса (так как это проще, незамысловатее).

На развитие ts сильно повлияло то, что ребята хотели быть совместимы с существующем js, и язык проектировался с оглядкой на то как используется js сегодня (поэтому, например, существует структурное подобие интерфейсов).

Классы нужны только как синтаксический сахар тому, что и так использовалось в js - описанию внуки-конструкторов.