Расширяя свой кругозор с помощью javascript вместе с моим опытом работы с python, я задумался.
Какова цель типа, если видение объекта внешнему клиенту осуществляется через его интерфейс?
В языках со статической типизацией тип имеет очень сильное центральное значение. Тип и интерфейс строго связаны. Например, в java, когда вы объявляете интерфейс FooIface и объект, реализующий этот интерфейс, вы не можете использовать его в контексте, требующем BarIface, даже если они совершенно одинаковы с точки зрения методов, сигнатур и исключений.
В питоне не так. Даже если два объекта имеют совершенно разные и несвязанные типы, пока их интерфейс одинаков, они полностью и прозрачно взаимозаменяемы. Если он крякает и ходит как утка, то это утка. Я могу полностью изменить природу объекта, полностью изменив его интерфейс во время выполнения, но при этом сохранится исходный тип.
Эта точка зрения доведена до крайности в javascript, где каждый объект в любой цепочке прототипов является просто объектом. вы спрашиваете тип каждого объекта в javascript, и он скажет вам, что это объект.
Мне кажется, что понятие типа для этих языков находится на грани бесполезности. Что же тогда действительно жизненно необходимо? Имеет ли тип реальное значение в языках с динамической типизацией?