Object Types, property modifiers (modificadores de propiedades) de Object Types, property modifiers (modificadores de propiedades)

Cada propiedad que existe en un objeto especifica un grupo de cosas: el tipo, si la propiedad es opcional, y si la propiedad es de solo lectura (no escribible) o no.

☆ Propiedades opcionales

La mayoría de las veces, nos vamos a encontrar lidiando con objetos que pueden tener o no una propiedad definida. En estos casos, marcamos esta propiedad como opcional añadiendo el signo de interrogación ? al final del nombre de la propiedad.

interface Computador {
    os: 'windows' | 'linux' | 'mac';
    monitor?: 'crt' | 'led'
    memoria: number;
    procesador: 'intel' | 'amd'
}

function imprimir(computador: Computador) {
    console.log(`Sistema operativo: ${computador.os}`);
    console.log(`Memoria: ${computador.memoria}`);
    console.log(`Procesador: ${computador.procesador}`);
}

imprimir({
    os: 'windows',
    memoria: 8,
    procesador: 'intel',
});

La salida del programa…

Sistema operativo: windows
Memoria: 8
Procesador: intel

En este ejemplo, la propiedad monitor es considerada opcional. Podemos elegir si enviarla o no como parte del objeto que se envía como argumento a la función imprimir. Si no declaramos un valor para esta su valor sera undefined, es decir no definida.

Si deseamos definir unos valores por default a las propiedades del parámetro computador, podemos hacer utilizando la destructuración.

interface Computador {
    os: 'windows' | 'linux' | 'mac';
    monitor?: 'crt' | 'led'
    memoria: number;
    procesador: 'intel' | 'amd'
}

function imprimir({ os, memoria, procesador, monitor = 'led'  }: Computador) {
    console.log(`Sistema operativo: ${os}`);
    console.log(`Monitor: ${monitor}`);
    console.log(`Memoria: ${memoria}`);
    console.log(`Procesador: ${procesador}`);
}

imprimir({
    os: 'windows',
    memoria: 8,
    procesador: 'intel',
});

La salida del programa…

Sistema operativo: windows
Monitor: led
Memoria: 8
Procesador: intel

Al descomponer el parámetro en cada uno de sus valores, podemos asignar a cada uno de estos un valor por default.