"use strict";
// Utilisation des génériques avec contrainte pour une classe
class Pile2 {
    constructor() {
        this.valeurs = [];
    }
    empiler(valeur) {
        this.valeurs.push(valeur);
    }
    depiler() {
        return this.valeurs.pop();
    }
    max() {
        if (this.valeurs.length == 0)
            return undefined;
        if (this.valeurs.length == 1)
            return this.valeurs[0];
        let maxVal = this.valeurs[0];
        for (let i = 1; i < this.valeurs.length; i++) {
            let v = this.valeurs[i];
            if (v != undefined && maxVal != undefined && v.compare(maxVal) > 0)
                maxVal = v;
        }
        return maxVal;
    }
}
class Nombre extends Number {
    compare(a) {
        if (a.valueOf() > this.valueOf())
            return a.valueOf();
        return this.valueOf();
    }
}
const pileNombre = new Pile2();
pileNombre.empiler(new Nombre(1));
pileNombre.empiler(new Nombre(2));
console.log(pileNombre.max());
//# sourceMappingURL=exemple15.js.map