Tapuscrit: implémentant l'interface dans le constructeur possible?

voix
4

Je l'interface suivante:

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

Et puis je veux la mettre en œuvre en tant que classe et les propriétés étant mis dans le constructeur:

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

Toutefois, selon la demande du compilateur n'implémente l'interface. Je ne comprends pas comment il le vérifier, alors qu'il a tout rempli en fonction de l'interface à la phase de construction et si elle était écrite en JavaScript cela fonctionne très bien, le type de vérification de la même chose dans les outils de fermeture fonctionne également parfaitement. L'idée est que je veux implémenter l'interface en tant que classe pour que je puisse avoir des méthodes d'utilité dans le prototype, mais toujours en mesure de convertir facilement à chaîne JSON.

Des idées?

Merci

Créé 08/10/2012 à 12:02
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
7

Le service linguistique analysera votre déclaration statiquement de votre interface, et parce que vous avez fait valoir qu'il exige que votre headermembre, qui doit faire partie de la déclaration de classe:

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";
    }
}

Ne vous inquiétez pas, la sortie javascript est beaucoup plus maigre:

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;
})();
Créé 08/10/2012 à 13:48
source utilisateur

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