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();
}