<file_sep>interface Edicion {
    editorial: string;
    fecha: number;
}

class LibroBasico implements Edicion {
    public id: number | string;
    public editorial;
    public fecha;
    public autor: string;
    public titulo: string;
    constructor(autor, titulo) {
        this.autor = autor;
        this.titulo = titulo;
    }
}

class LibroTecnico extends Libro {
    public tema: string;
    constructor(autor, titulo, tema) {
        super(autor, titulo);
        this.tema = tema;
    }

    mostrar() {
        console.log(this);
    }
}

const oLibroT = new LibroTecnico('Pepito', 'Angular Facil', 'Programacion');
oLibroT.mostrar();
<file_sep>interface Edicion {
    editorial: string;
    fecha: number;
}

class Libro implements Edicion {
    public id: number | string;
    public editorial;
    public fecha;
    constructor(public autor: string, public titulo: string) {}
}

const oLibro = new Libro('J.Pérez', 'Angular Facil');

// Al ser una clase sin métodos,
// es posible crear objetos literales que cumplan con el tipo

let oLibro2: Libro = {
    id: '',
    autor: '',
    titulo: '',
    editorial: '',
    fecha: 0};

// También es posible usar los interfaces para definir tipos
let oEdicion: Edicion = {
    editorial: '',
    fecha: 0};

<file_sep>let aDatos = [{precio : 22}, {precio : 34}, {precio : 57} ]
calcularPrecios(12)
// calcularPrecios()

function calcularPrecios (pIva= 22) {
    {
        let nIva = 1 + (pIva/100)
        let precioFinal
            aDatos.forEach(  elem => {
                precioFinal = elem.precio * nIva
                mostrarPrecio ( precioFinal)
            })
        console.log('El IVA aplicado ha sido ',nIva)
    }
    // console.log(nIva)
}

function mostrarPrecio (precioFinal) {
    console.log(
        `
        El precio final es:
        ${precioFinal.toFixed(2)}`
    )
}


