456 Stimmen

Verfügt JavaScript über einen Schnittstellentyp (wie z. B. Java's 'interface')?

Ich lerne wie man OOP mit JavaScript macht . Verfügt es über ein Schnittstellenkonzept (wie das von Java interface ) ?

Ich könnte also einen Hörer erstellen...

12voto

Kevin Krausse Punkte 81

Abstrakte Schnittstelle wie diese

const MyInterface = {
  serialize: () => {throw "must implement serialize for MyInterface types"},
  print: () => console.log(this.serialize())
}

eine Instanz erstellen:

function MyType() {
  this.serialize = () => "serialized "
}
MyType.prototype = MyInterface

und verwenden Sie es

let x = new MyType()
x.print()

7voto

Alex Reitbort Punkte 13255

In Java braucht man Schnittstellen, da es statisch typisiert ist und der Vertrag zwischen Klassen während der Kompilierung bekannt sein sollte. In JavaScript ist das anders. JavaScript ist dynamisch typisiert, d. h., wenn Sie das Objekt erhalten, können Sie einfach prüfen, ob es eine bestimmte Methode hat, und diese aufrufen.

5voto

shaedrich Punkte 4845

Wenn Sie einen Transcompiler verwenden möchten, können Sie TypeScript ausprobieren. Es unterstützt den Entwurf der ECMA-Funktionen (im Vorschlag werden Schnittstellen als " Protokolle "), ähnlich wie es Sprachen wie coffeescript oder babel tun.

In TypeScript kann Ihre Schnittstelle wie folgt aussehen:

interface IMyInterface {
    id: number; // TypeScript types are lowercase
    name: string;
    callback: (key: string; value: any; array: string[]) => void;
    type: "test" | "notATest"; // so called "union type"
}

Was Sie nicht tun können:

4voto

Gilbert Punkte 1501

Versuchen Sie dies: Beschreiben Sie die Schnittstelle als Klasse und verwenden Sie @implements JSDoc, um zu zeigen, dass eine bestimmte Klasse die definierte Schnittstelle implementiert. Sie sehen rote, verschnörkelte Linien am Klassennamen, wenn die Klasse einige Eigenschaften nicht implementiert. Ich habe mit VSCode getestet.

// @ts-check

// describe interface using a class
class PlainInterface {
    size = 4;
    describe() {}
    show(){ }
}

/**
 * @implements  PlainInterface 
 */
class ConcretePlain {
    size = 4;
    describe() {
        console.log('I am described')
    }
    show(){
        console.log('I am shown')
    }
}       

const conc = new ConcretePlain();
conc.describe();

3voto

Amit Wagner Punkte 2871

Es gibt keine nativen Schnittstellen in JavaScript, Es gibt mehrere Möglichkeiten, eine Schnittstelle zu simulieren. Ich habe ein Paket geschrieben, das dies tut

Sie können die Implantation sehen aquí

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X