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.