// Utilisation d'un champ statique

type Taille = {
    hauteur : number,
    largeur : number
};

interface AvecVolume {
    dimension():Taille;
}

class Jouet implements AvecVolume {
    dimension(): Taille {
        return { hauteur : 10, largeur : 10 };
    }
}

class Livre implements AvecVolume {
    dimension(): Taille {
        return { hauteur : 20, largeur : 20 };
    }
}

class PorteCle implements AvecVolume {
    dimension(): Taille {
        return { hauteur : 2, largeur : 2 };
    }
}

class SocieteEmballage {
    emballer( monObjet : AvecVolume ) {
        console.log( `On prend un carton de volume > ${monObjet.dimension().hauteur}*${monObjet.dimension().largeur} `);
    }
}

const maSociete : SocieteEmballage = new SocieteEmballage();
const objetsALivrer = [new Jouet(),new Livre,new PorteCle];
objetsALivrer.forEach( objet => maSociete.emballer( objet ) );