En TypeScript, tanto null como undefined representan valores ausentes o no definidos. Sin embargo, aunque en ciertos aspectos parecen similares, tienen significados y usos distintos.
De forma resumida,
- Undefined: Es un valor que indica que una variable ha sido declarada pero no inicializada.
- Null: Es un valor que se asigna explícitamente a una variable para indicar la ausencia intencional de un valor.
Uso de undefined
Declaración e Inicialización
Cuando una variable se declara pero no se inicializa, su valor es undefined.
let miVariable: string;
console.log(miVariable); // Output: undefinedFunciones que no retornan valores
Las funciones que no tienen una declaración de retorno explícita retornan undefined por defecto.
function saludar(): void {
    console.log("Hola");
}
const resultado = saludar();
console.log(resultado); // Output: undefinedParámetros de funciones
Si no se pasa un argumento a una función, el valor del parámetro será undefined.
function imprimirMensaje(mensaje: string) {
    console.log(mensaje);
}
imprimirMensaje(); // Error: se esperaba 1 argumento, pero se obtuvo 0Propiedades de objetos
Las propiedades de los objetos que no se definen explícitamente son undefined.
const persona = {
    nombre: "Luis"
};
console.log(persona.edad); // Output: undefinedUso de null
Asignación de null
null debe ser asignado explícitamente a una variable.
let miVariable: string | null = null;
console.log(miVariable); // Output: nullInicialización explícita
Se puede utilizar null para inicializar variables que se espera que tengan un valor en el futuro.
let resultado: number | null = null;
// Código que asignará un valor a resultado
resultado = 42;
console.log(resultado); // Output: 42Configuración strict null checks
Cuando strictNullChecks está habilitado en TypeScript, null y undefined no son subtipos de todos los demás tipos.
Esto significa que una variable de tipo string no puede contener null o undefined a menos que se especifique explícitamente.
// tsconfig.json
{
    "compilerOptions": {
        "strictNullChecks": true
    }
}Definición de tipos
Se pueden definir tipos que incluyan null y undefined.
let nombre: string | null = "Luis";
nombre = null;
let edad: number | undefined;
edad = 25;
edad = undefined;Operaciones comunes con null y undefined
Operador de coalescencia nula
El operador de coalescencia nula (??) permite proporcionar un valor por defecto cuando una variable es null o undefined.
let valor: string | null = null;
let mensaje = valor ?? "Valor por defecto";
console.log(mensaje); // Output: Valor por defectoOperador opcional de encadenamiento
El operador opcional de encadenamiento (?.) permite acceder a propiedades de objetos que pueden ser null o undefined.
const persona = {
    nombre: "Luis",
    direccion: {
        ciudad: "Madrid"
    }
};
console.log(persona.direccion?.ciudad); // Output: Madrid
console.log(persona.contacto?.telefono); // Output: undefined