А я и не про наследование говорил. Композиция? Хорошо - как вы 100500 методов объекта ссылки будете в композите реализовывать? В ТС extends - это и в типах работает: interface A extends B {x: something} - то же, что type A = B & {x: something}
в пхп например, если в классе есть определенный метод - ты можешь сунуть этот класс туда, где этот метод ожидается, и он будет вызван. но нужно не ограничивать тип аргумент метода классом, надо вместо этого лучше использовать интерфейс. т.к. интерфейс реализовать может любой класс. а вот унаследоваться от класса не любой класс может.
в пхп например, если в классе есть определенный метод - ты можешь сунуть этот класс туда, где этот метод ожидается, и он будет вызван. но нужно не ограничивать тип аргумент метода классом, надо вместо этого лучше использовать интерфейс. т.к. интерфейс реализовать может любой класс. а вот унаследоваться от класса не любой класс может.
надо заменить зависимости от классов на зависимости от интерфейсов, если надо иметь несколько классов, разных, реализующих этот интерфейс. да, под это придется осознанно заложиться.
в пхп например, если в классе есть определенный метод - ты можешь сунуть этот класс туда, где этот метод ожидается, и он будет вызван. но нужно не ограничивать тип аргумент метода классом, надо вместо этого лучше использовать интерфейс. т.к. интерфейс реализовать может любой класс. а вот унаследоваться от класса не любой класс может.
То что ты упоминал это duck typing, так в руби любят.
в пхп например, если в классе есть определенный метод - ты можешь сунуть этот класс туда, где этот метод ожидается, и он будет вызван. но нужно не ограничивать тип аргумент метода классом, надо вместо этого лучше использовать интерфейс. т.к. интерфейс реализовать может любой класс. а вот унаследоваться от класса не любой класс может.
О, так у нас теперь только интерфейсы - типы, а классы.... недотипы, что ли?))))
О, так у нас теперь только интерфейсы - типы, а классы.... недотипы, что ли?))))
ну вот ты допустим хочешь а и б тип иметь. при этом а и б - классы. теперь вопрос - что эти классы делают? почему нельзя создать 2 интерфейса с теми же методами, и не написать класс, имеющий все поля классов а и б, и реализующий оба интерфейса, и использовать его там?