// Utilisation des génériques pour une classe

class Pile<T> {

    valeurs : T[];

    constructor() {
        this.valeurs = [];
    }

    empiler(valeur:T) {
        this.valeurs.push( valeur );
    }

    depiler():T|undefined {
        return this.valeurs.pop();
    }
}

const pile : Pile<string> = new Pile<string>();
pile.empiler( "bonjour" );
pile.empiler( "au revoir" );
console.log( pile.depiler() );

const pile2 : Pile<number> = new Pile<number>();
pile2.empiler( 1 );
pile2.empiler( 2 );
console.log( pile2.depiler() );

class PileEntier extends Pile<number> {

}

const pile3 : PileEntier = new PileEntier();
pile3.empiler( 3 );
pile3.empiler( 4 );
console.log( pile3.depiler() );



