Как созадть интерфейс в JavaScript?
JS динамический язык с утиной типизацией. Собственно как в Ruby или Python. Наследование в нем реализуется через объекты и прототипы объектов. То есть места интерфейсу тупо нету.
Грубо говоря, если допустить наличие "классов" в JS, то интерфейсом будет как раз таки абстрактный класс, у которого реализация всех методов выбрасывает ошибку not implemented. Во всяком случае люди которые еще не отвыкли писать интерфейсы на все и вся в Python или Ruby так обходятся.
Но вообще вы должны подчиниться правилам утиной типизации и делать как-то так:function can(obj, methodName) {
     return ((typeof obj[methodName]) == "function");
}

// вот так вот сурово мы подаем вместо объекта словарь!
var dict = {
   quack: function () {
       console.log('Quack! Quack!');
   }
}

// метод требует объект реализующий метод quack
function test(obj) {
    if(!can(obj, 'quack')) { throw "Object should implement quack method" }
    obj.quack();
}
Интерфейс - способ "объявить" метод, но вынести его реализацию за рамки объекта/класса/модуля/всего_проекта/
Чаще всего используется в случаях, когда вариантов реализации метода over9000 и/или требуется динамически изменять код метода, сохраняя остальной код/объект неизменным.
Сергей Протько более чем прав по поводу DuckTyping в JavaScript. Так что нет смысла пытаться повторять статическую типизацию из Java и проверять наличие методов во время создания. Правда мне претит идея вставлять такие If вручную в каждой строке использования метода "интерфейса". У меня есть библиотека реализующая и немного расширяющая данный подход.jsInteface - это реализация классческих ООП интерфейсов на Javascript с поправкой на его динамическую природу.
Эта библиотекаво-первых проверяет наличие у имплементации метода в момент его вызоваво-вторых подменяет this имплементации интерфейса на this владельца интерфейса