Typescript: interfață Implementarea în constructor posibil?

voturi
4

Am următoarea interfață:

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

Și apoi vreau să-l pună în aplicare ca o clasă și proprietățile fiind stabilite în 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);
    }
  }

Cu toate acestea, conform cererii compilatorul nu implementează interfața. Nu înțeleg cum nu-l verifica, în timp ce a umplut totul în funcție de interfața de la faza de construcție și în cazul în scris în JavaScript acest lucru ar lucra bine, tipul de verificare același lucru în instrumente de închidere, de asemenea, funcționează perfect. Ideea este că vreau să pună în aplicare interfață ca o clasă, așa că am putea avea metode de utilitate în prototip, dar încă să fie capabil de a converti cu ușurință la un șir JSON.

Vreo idee?

Mulțumiri

Întrebat 08/10/2012 la 12:02
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
7

Serviciul de limbă va analiza declarația dumneavoastră de static interfața dvs., și pentru că v - ați exprimat că este necesar ca dumneavoastră headermembru, care ar trebui să facă parte din declarația de clasă:

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

Nu-ți face griji, de ieșire javascript este mult mai flexibil:

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;
})();
Publicat 08/10/2012 la 13:48
sursa de către utilizator

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