Typoskript: Implementieren Schnittstelle im Konstruktor möglich?

stimmen
4

Ich habe die folgende Schnittstelle:

interface SMJSPacket {
  header: {
    tag: string;
    method: string;
    type: string;
  };
  response?: {
    status: string;
    content: string;
  };
  event?: {
    key?: string;
    action?: string;
  };
  request?: {
    run?: string;
  };
}

Und dann will ich es als eine Klasse implementieren und die Eigenschaften im Konstruktor festgelegt werden:

  class Request implements SMJSPacket {
    constructor(data: any, method: string) {
      this.header = {
        type: 'request',
        method: method || 'calld',
        tag: Request.getTag()
      }
      this.request = data;
    }
    static getTag(): string {
      return '_' + goog.now() + '_' + utils.getRandomBetween(1, 1000);
    }
  }

Jedoch nach der Compiler Anforderung nicht die Schnittstelle zu implementieren. Ich verstehe nicht, wie es sie überprüft, während sie alles nach der Schnittstelle in der Bauphase gefüllt ist und wenn in JavaScript geschrieben würde dies funktionieren, geben Sie die gleiche Sache in Closure Tools Überprüfung auch perfekt funktioniert. Die Idee ist, dass ich die Schnittstelle als eine Klasse implementieren möchten, damit ich Utility-Methoden im Prototyp haben, aber noch in der Lage sein, leicht zu JSON-String zu konvertieren.

Irgendwelche Ideen?

Vielen Dank

Veröffentlicht am 08/10/2012 um 12:02
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
7

Der Sprachendienst wird statisch Ihre Erklärung Ihrer Schnittstelle analysieren, und weil Sie zum Ausdruck gebracht haben , dass es erfordert , dass Ihr headerMitglied, dass ein Teil der Klassendeklaration bilden sollte:

class Request implements SMJSPacket {
    header: { tag: string; method: string; type: string; };

    constructor(data: any, method: string) {
        this.header = {
            type: "request",
            method: (method || "calld"),
            tag: Request.getTag()
        };
    }

    static getTag(): string {
        return "tag stuff";
    }
}

Keine Sorge, Sie Javascript um die Ausgabe viel schlanker ist:

var Request = (function () {
    function Request(data, method) {
        this.header = {
            type: "request",
            method: (method || "calld"),
            tag: Request.getTag()
        };
    }
    Request.getTag = function getTag() {
        return "tag stuff";
    }
    return Request;
})();
Beantwortet am 08/10/2012 um 13:48
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more