Как сделать интерфейс статических методов класса?
Абстрактный класс в качестве наследника даёт автокомплит, но не ругает за отсутствие реализации - он как бы уже реализован.
Я хочу настоящий контракт, что бы класс Person имел статические методы CRUD, как и прочие модели данных моего приложения, чтобы статические методы моделей данных были строго полиморфными.
Неужели в ts классы, (фактически являясь функциями, фактически являющейся объектами) , так не могут?
для чего их делать статическими? почему нельзя реализовать контракт через обычные члены класса?
Действительно, тип класса в TS состоит из двух объектных типов, связанных лишь через свойство prototype: типа инстанса, и типа статической части, то есть самого конструктора как функции и его свойств (задаётся как гибридный тип). При этом инструкция implements накладывает ограничения только на тип инстанса, то есть никак не описывает требуемый тип конструктора и его свойств. Но на переменную с классом можно наложить обычные типовые ограничения, как на любую другую переменную (это и будет ограничением статической части класса). Эти особенности и примеры типизации одновременно обеих частей класса описаны в документации: Difference between the static and instance sides of classes. Более подробный пример типизации статики и инстанса (через implements): play. Аналогичный пример с упрощённым синтаксисом (типизация инстанса через свойство prototype в статической части, вместо implements): play.
Обсуждают сегодня