Letra de imprenta: La implementación de la interfaz en el constructor posible?

votos
4

Tengo la siguiente interfaz:

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

Y luego quiero ponerlo en práctica como clase y las propiedades de ser fijado en el constructor:

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

Sin embargo de acuerdo a la solicitud compilador no está implementando la interfaz. No entiendo cómo se compruebe que, si bien ha llenado todo de acuerdo con la interfaz en la fase de construcción como si estuvieran escritas en JavaScript que esto funcionaría bien, la comprobación de tipos lo mismo en las herramientas de cierre también funciona a la perfección. La idea es que quiero implementar la interfaz como una clase para que pueda tener métodos de utilidad en el prototipo, pero aún así ser capaz de convertir fácilmente a cadena JSON.

¿Algunas ideas?

Gracias

Publicado el 08/10/2012 a las 12:02
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
7

El servicio de idiomas a analizar estáticamente su declaración de la interfaz, y debido a que usted ha expresado que requiere que su headermiembro, que debe formar parte de la declaración de clase:

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

No se preocupe, la salida Javascript es mucho más delgado:

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;
})();
Respondida el 08/10/2012 a las 13:48
fuente por usuario

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