/// <reference path="../Scripts/typings/moment/moment.d.ts" />
/// <reference path="../scripts/typings/jquery/jquery.d.ts" />
/// <reference path="DuckTyping.ts" />
$("#content").before("Hallo Welt!");
var modell = DemoKunden.GO;
var name = "Holger Schwichtenberg";
var plz = 45257;
var autor = true;
var website = "http://www.dotnet-doktor.de";
//function ausgabe(text: string): void {
// $('#content').before(text + "<br>");
//}
function ausgabeVar(obj) {
    ausgabe(typeof obj + ": " + obj);
}
// Deklaration einer Enumeration
var Protokolleintragsart;
(function (Protokolleintragsart) {
    Protokolleintragsart[Protokolleintragsart["Information"] = 0] = "Information";
    Protokolleintragsart[Protokolleintragsart["Warnung"] = 1] = "Warnung";
    Protokolleintragsart[Protokolleintragsart["Fehler"] = 2] = "Fehler";
})(Protokolleintragsart || (Protokolleintragsart = {}));
;
// Nutzung der Enumeration
function DemoEnum() {
    var art;
    art = Protokolleintragsart.Warnung;
    ausgabeVar(art); // liefert 1
    ausgabeVar(Protokolleintragsart[art]); // liefert "Warnung"
}
function DemoKlassen() {
    // Konstruktor
    var k1 = new DemoKunden.GO.Kunde(123, "Holger Schwichtenberg", "Essen");
    // Typepruefungen
    var IstInVariableEinKunde = k1 instanceof GO.Kunde;
    var IstInVariableEinKontakt = k1 instanceof GO.Kontakt;
    var TypName = typeof k1;
    ausgabe(IstInVariableEinKunde.toString());
    ausgabe(IstInVariableEinKontakt.toString());
    ausgabe("k hat den Typ:" + TypName);
}
function DemoModule() {
    var k1 = new DemoKunden.GO.Kunde(123, "Holger Schwichtenberg", "Essen");
    var k2 = new modell.Kunde(123, "Holger Schwichtenberg", "Essen");
}
function TypHerleitung() {
    var transformString;
    transformString = function (str) { return str.toLowerCase(); };
    function add(a, b) {
        return a + b;
    }
    var sum = add(1, 2);
}
function DemoFunktionen() {
    ausgabe("DemoFunktionen");
    /** Gibt eine Begrüßung aus.
    * @param Gruss und Trennzeichen sind optional.
    */
    function halloWelt(name, gruss, trenner) {
        if (gruss === void 0) { gruss = "Hallo"; }
        if (trenner == undefined)
            trenner = " ";
        ausgabe(gruss + trenner + name);
    }
    halloWelt("Holger");
    halloWelt("Holger", "Hallo");
    halloWelt("Holger", "Hallo", ", ");
    // Diese Zeile fuehrt zu einem Kompilierungsfehler
    // halloWelt(5);
    // --------------------------------------
    function mult(a, b) {
        return a + b;
    }
    var sum = mult(1, 2);
    // ---------------------------------------
    function Zusammensetzen(a, b) {
        return a + "  " + b;
    }
    var ganzerName = Zusammensetzen("Holger", "Schwichtenberg");
    // ---------------------------------------
    var berechnung;
    function add(x, y) {
        return x + y;
    }
    berechnung = add;
    ausgabe("Ergebnis: " + berechnung(17, 2));
    // ---------------------------------------
    function filter(objs, callback) {
        var ergebnismenge = new Array();
        for (var i = 0; i < objs.length; i++) {
            if (callback(objs[i])) {
                ergebnismenge.push(objs[i]);
            }
        }
        return ergebnismenge;
    }
    var result = filter([1, 2, 3, 4, 5, 6], function (item) { return item % 2 == 0; });
    ausgabe("Anzahl der Elemente in der Ergebnismenge: " + result.length);
    // ---------------- Funktionstypen
    // Variable mit Funktionstyp deklarieren
    var FunktionsTypIntIntAufString;
    // Funktion mit klassischem Rumpf
    function SummeAlsString(x, y) {
        return "Die Summe aus " + x + " und " + y + " ist " + (x + y) + ".";
    }
    // Zuweisung der Funktionstyp-Variablen an die Funktion
    FunktionsTypIntIntAufString = SummeAlsString;
    // Aufruf der Funktion
    ausgabe(FunktionsTypIntIntAufString(1, 3));
    // Variable mit Funktionstyp deklarieren
    var transformString;
    // Funktion mit Lambda-Ausdruck im Rumpf
    transformString = function (str) { return str.toLowerCase(); };
    ausgabe(transformString("Holger Schwichtenberg"));
}
function DemoVariablen() {
    ausgabe("DemoVariablen");
    ausgabeVar(name);
    ausgabeVar(plz);
    ausgabeVar(autor);
    ausgabeVar(website);
    // Nicht erlaubt
    //var x : undefined;
    var x = undefined;
    ausgabeVar(x);
    // Nicht erlaubt
    //var y: null;
    var y = null;
    ausgabeVar(y);
    var z;
    ausgabeVar(z);
    // Typsicherheit
    var a;
    a = 5;
    // Fehler: a = "test";
    var b;
    // Fehler:  b = a;
    b = a.toString();
    b = "test";
    var Website1 = "http://www.ix.de";
    //Website1 = 11; // Fehler: "Cannot convert 'number' to 'string'."
    ausgabeVar(Website1);
    var Website2 = "http://www.dotnet-doktor.de";
    Website2 = 1;
    ausgabeVar(Website2);
    var Website3;
    Website3 = "http://www.typescript.org";
    Website3 = 4;
    ausgabeVar(Website3);
    var m = null;
    var n = undefined;
    // IntelliSense Demo
    var Zahl1;
    Zahl1 = 5;
    ausgabeVar(Zahl1.toString());
    var Zahl2;
    Zahl2 = 5;
    ausgabeVar(Zahl2.toString()); // Keine IntelliSense
    // Any
    var test;
    test.bla();
}
//# sourceMappingURL=Syntax.js.map