2016-03-19 5 views
0

Ich habe eine einfache Typoskript-Datei wie folgt:Typoskript Fehler in Google Chrome

module HouseOfSynergy 
{ 
    export module Library 
    { 
     export class Version 
     { 
      private _Major: number = 0; 
      private _Minor: number = 0; 
      private _Build: number = 0; 
      private _Revision: number = 0; 

      public get Major(): number { return (this._Major); } 
      public get Minor(): number { return (this._Minor); } 
      public get Build(): number { return (this._Build); } 
      public get Revision(): number { return (this._Revision); } 

      constructor(major: number, minor: number, build: number, revision: number) 
      { 
       this._Major = major; 
       this._Minor = minor; 
       this._Build = build; 
       this._Revision = revision; 
      } 

      public toString(): string 
      { 
       return (this._Major.toString() + "." + this._Minor.toString() + "." + this._Build.toString() + "." + this._Revision.toString()); 
      } 

      private static _Current: HouseOfSynergy.Library.Version = new HouseOfSynergy.Library.Version(1, 0, 0, 0); 
      public static get Current(): HouseOfSynergy.Library.Version { return (HouseOfSynergy.Library.Version._Current); } 
     } 
    } 
} 

Die statische Eigenschaft Current aus einer HTML-Datei wird wie folgt aufgerufen:

alert(HouseOfSynergy.Library.Version.Current.toString()); 

Google Chrome erzeugt die folgenden Fehler :

Typoskript:
enter image description here enter image description here

HTML/JavaScript:
enter image description here enter image description here

ich versucht habe, die statische Eigenschaft auf eine Funktion, die Umwandlung aber immer wieder die gleichen Fehler. Selbst das Deklarieren einer Instanz der Version Klasse new Version(1, 0, 0, 0) erzeugt denselben Fehler. Alle Hinweise würden geschätzt werden.

Hier ist die erzeugte JavaScript:

var HouseOfSynergy; 
(function (HouseOfSynergy) { 
    var Library; 
    (function (Library) { 
     var Version = (function() { 
      function Version(major, minor, build, revision) { 
       this._Major = 0; 
       this._Minor = 0; 
       this._Build = 0; 
       this._Revision = 0; 
       this._Major = major; 
       this._Minor = minor; 
       this._Build = build; 
       this._Revision = revision; 
      } 
      Object.defineProperty(Version.prototype, "Major", { 
       get: function() { return (this._Major); }, 
       enumerable: true, 
       configurable: true 
      }); 
      Object.defineProperty(Version.prototype, "Minor", { 
       get: function() { return (this._Minor); }, 
       enumerable: true, 
       configurable: true 
      }); 
      Object.defineProperty(Version.prototype, "Build", { 
       get: function() { return (this._Build); }, 
       enumerable: true, 
       configurable: true 
      }); 
      Object.defineProperty(Version.prototype, "Revision", { 
       get: function() { return (this._Revision); }, 
       enumerable: true, 
       configurable: true 
      }); 
      Version.prototype.toString = function() { 
       return (this._Major.toString() + "." + this._Minor.toString() + "." + this._Build.toString() + "." + this._Revision.toString()); 
      }; 
      Object.defineProperty(Version, "Current", { 
       get: function() { return (HouseOfSynergy.Library.Version._Current); }, 
       enumerable: true, 
       configurable: true 
      }); 
      Version._Current = new HouseOfSynergy.Library.Version(1, 0, 0, 0); 
      return Version; 
     }()); 
     Library.Version = Version; 
    })(Library = HouseOfSynergy.Library || (HouseOfSynergy.Library = {})); 
})(HouseOfSynergy || (HouseOfSynergy = {})); 
+0

Am Ende des Tages, Chrome arbeitet mit dem Javascript, dass die Typoskript Compiler erzeugt, werden wir Ich brauche Javascript, um helfen zu können. Sobald wir wissen, wie das Javascript aussieht und wo das Problem liegt, können wir Ihnen hoffentlich helfen, Ihr Typoskript zu reparieren. Vielleicht möchten Sie auch angeben, welche TypeScript-Version Sie verwenden und was Ihre Einstellung "--target" ist (für tsc.exe). – CodingGorilla

+0

Ich bin mir nicht sicher, über das Typoskript, aber transpiling es in JS, 'HouseOfSynergy.Library.Version' wird instanziiert, bevor' Version' Klasse dem 'Library' Objekt zugewiesen wird. Sie sollten also lieber 'neue Version' für die Zuweisung' private static _Current: HouseOfSynergy.Library.Version = neue Version (1, 0, 0, 0) ' –

+0

@CodingGorilla: Generiertes JavaScript hinzugefügt haben. Ich benutze die TS Version 1.8.5, die die neueste Version von heute ist. –

Antwort

1

Wenn Sie Code schreiben in einem Namespace, können Sie den vollständigen Namensraum weglassen. Nicht nur, dass dieser Make-Code weniger ausführlich und lesbarer ... es wird auch funktionieren ...

module HouseOfSynergy 
{ 
    export module Library 
    { 
     export class Version 
     { 
      public static get Current(): Version { return (Version._Current); } 

      private static _Current: Version = new Version(1, 0, 0, 0); 

      public get Major(): number { return (this.major); } 
      public get Minor(): number { return (this.minor); } 
      public get Build(): number { return (this.build); } 
      public get Revision(): number { return (this.revision); } 

      constructor(private major: number, private minor: number, private build: number, private revision: number) 
      { 
      } 

      public toString(): string 
      { 
       return (this.major + "." + this.minor + "." + this.build + "." + this.revision); 
      } 
     } 
    } 
} 

alert(HouseOfSynergy.Library.Version.Current.toString()); 
+0

Dies ist definitiv lesbarer. Obwohl ich mit Variationen experimentieren konnte, war ich überzeugt, dass die Reihenfolge der Erklärungen wichtig war. Ihr Beispiel scheint das zu negieren. Ich spiele weiter damit und wende mich gegebenenfalls zurück. Vielen Dank. –