TypeScript

TypeScript

Tutorial TypeScript: Inmutabilidad

TypeScript inmutabilidad: técnicas y ejemplos. Domina las técnicas de inmutabilidad en TypeScript con ejemplos prácticos y detallados.

Aprende TypeScript y certifícate

La inmutabilidad es un principio fundamental en programación funcional. Un objeto inmutable es un objeto cuyo estado no puede ser modificado después de que se ha creado.

Concepto de inmutabilidad

Imagínese que se tiene un objeto en código, y varias partes del programa pueden acceder y cambiar este objeto. En tal escenario, es complicado seguir la lógica del programa y predecir su comportamiento, porque el estado del objeto puede cambiar en cualquier momento desde cualquier lugar. Aquí es donde entra en juego el principio de inmutabilidad.

Cuando se trabaja con objetos inmutables, el objeto no se modifica. En su lugar, si se necesita hacer cambios, se puede crear una copia del objeto con los cambios aplicados. Esto facilita el rastreo del estado de los objetos y reduce el riesgo de efectos secundarios inesperados.

Estructuras de datos inmutables

En TypeScript, los tipos primitivos son inmutables por defecto. Estos incluyen boolean, number, string, null, undefined y symbol.

let a = "hola";
a = "adios"; // Esto no modifica la cadena original, sino que reasigna a a una nueva cadena

Sin embargo, los tipos de datos complejos, como los objetos y los arrays, no son inmutables.

let a = { saludo: "hola" };
a.saludo = "adios"; // Esto modifica el objeto original

Si se quiere hacer que estos tipos sean inmutables, se deben utilizar técnicas especiales.

Objetos inmutables

Se puede hacer que un objeto sea inmutable utilizando Object.freeze.

let a = { saludo: "hola" };
Object.freeze(a);
a.saludo = "adios"; // Esto lanza un error

Se debe tener en cuenta que Object.freeze solo es superficial, lo que significa que no hace que los objetos anidados sean inmutables.

let a = { saludo: { palabra: "hola" } };
Object.freeze(a);
a.saludo.palabra = "adios"; // Esto no lanza un error

En el ejemplo anterior, se ha hecho Object.freeze de a, pero no de a.saludo, de forma que no se podría modificar el primero pero sí el segundo.

Arrays inmutables

Pueden tratarse a los arrays como inmutables utilizando métodos que no modifican el array original, sino que devuelven un nuevo array con los cambios aplicados. Estos métodos incluyen map, filter, slice, concat, etc. Por ejemplo, el método map devuelve un nuevo array al que se le aplica una transformación, pero sin modificar el array original.

let a = [1, 2, 3];
let b = a.map(x => x * 2);
// b es [2, 4, 6], a todavía es [1, 2, 3]

Readonly en TypeScript

TypeScript proporciona una manera de asegurar que una variable no se modifique: el modificador readonly.

interface Persona {
  readonly nombre: string;
  readonly edad: number;
}

let persona: Persona = { nombre: "Juan", edad: 30 };
persona.nombre = "Pedro"; // Esto arroja un error

En este ejemplo, nombre y edad son solo de lectura, por lo que no pueden ser modificados después de la asignación inicial.

En resumen, la inmutabilidad es un principio poderoso que puede hacer que el código sea más predecible y más fácil de entender. En TypeScript, se pueden usar varias técnicas para asegurar la inmutabilidad, incluyendo Object.freeze, métodos inmutables de arrays y el modificador readonly.

Aprende TypeScript online

Otros ejercicios de programación de TypeScript

Evalúa tus conocimientos de esta lección Inmutabilidad con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Funciones

TypeScript
Test

Reto composición de funciones

TypeScript
Código

Reto tipos especiales

TypeScript
Código

Reto tipos genéricos

TypeScript
Código

Módulos

TypeScript
Test

Polimorfismo

TypeScript
Código

Funciones TypeScript

TypeScript
Código

Interfaces

TypeScript
Puzzle

Funciones puras

TypeScript
Puzzle

Reto namespaces

TypeScript
Código

Funciones flecha

TypeScript
Puzzle

Polimorfismo

TypeScript
Test

Operadores

TypeScript
Test

Conversor de unidades

TypeScript
Proyecto

Funciones flecha

TypeScript
Test

Control de flujo

TypeScript
Código

Herencia

TypeScript
Puzzle

Clases

TypeScript
Puzzle

Proyecto validación de tipado

TypeScript
Proyecto

Clases y objetos

TypeScript
Código

Encapsulación

TypeScript
Test

Herencia

TypeScript
Test

Proyecto sistema de votación

TypeScript
Proyecto

Reto genéricos con clases

TypeScript
Código

Inmutabilidad

TypeScript
Puzzle

Interfaces

TypeScript
Test

Funciones de alto orden

TypeScript
Test

Reto map y filter

TypeScript
Código

Control de flujo

TypeScript
Test

Interfaces

TypeScript
Código

Reto funciones orden superior

TypeScript
Código

Herencia y clases abstractas

TypeScript
Código

Reto tipos mapped

TypeScript
Código

Herencia de clases

TypeScript
Código

Reto funciones puras

TypeScript
Código

Variables y constantes

TypeScript
Puzzle

Introducción a TypeScript

TypeScript
Test

Reto testing unitario

TypeScript
Código

Funciones de primera clase

TypeScript
Puzzle

Clases

TypeScript
Test

OOP y CRUD en TypeScript

TypeScript
Proyecto

Interfaces y su implementación

TypeScript
Código

Tipos genéricos

TypeScript
Test

Namespaces

TypeScript
Test

Operadores y expresiones

TypeScript
Código

Proyecto generador de contraseñas

TypeScript
Proyecto

Reto unión e intersección

TypeScript
Código

Encapsulación

TypeScript
Puzzle

Tipos de unión e intersección

TypeScript
Test

Tipos de unión e intersección

TypeScript
Puzzle

Reto hola mundo en TS

TypeScript
Código

Variables y constantes

TypeScript
Código

Funciones puras

TypeScript
Test

Control de flujo

TypeScript
Código

Introducción a TypeScript

TypeScript
Código

Resolución de módulos

TypeScript
Test

Control de flujo

TypeScript
Puzzle

Reto tipos de utilidad

TypeScript
Código

Reto tipos literales y condicionales

TypeScript
Código

Reto exportar e importar

TypeScript
Código

Propiedades y métodos

TypeScript
Código

Tipos de utilidad

TypeScript
Test

Clases y objetos

TypeScript
Código

Tipos de datos, variables y constantes

TypeScript
Código

Proyecto Minigestor de tareas

TypeScript
Proyecto

Operadores

TypeScript
Puzzle

Funciones flecha y contexto

TypeScript
Código

Proyecto Inventario de productos

TypeScript
Proyecto

Funciones

TypeScript
Puzzle

Reto type aliases

TypeScript
Código

Funciones de alto orden

TypeScript
Puzzle

Funciones y parámetros tipados

TypeScript
Código

Tipos literales

TypeScript
Puzzle

Reto enums

TypeScript
Código

Tipos de utilidad

TypeScript
Puzzle

Modificadores de acceso y encapsulación

TypeScript
Código

Polimorfismo

TypeScript
Puzzle

Tipos genéricos

TypeScript
Puzzle

Reto módulos

TypeScript
Código

Tipos literales

TypeScript
Test

Inmutabilidad

TypeScript
Test

Proyecto Generator de datos

TypeScript
Proyecto

Variables y constantes

TypeScript
Test

Funciones de primera clase

TypeScript
Test

Todas las lecciones de TypeScript

Accede a todas las lecciones de TypeScript y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A Typescript

TypeScript

Introducción Y Entorno

Instalación Y Configuración De Typescript

TypeScript

Introducción Y Entorno

Tipos De Datos, Variables Y Constantes

TypeScript

Sintaxis

Operadores Y Expresiones

TypeScript

Sintaxis

Control De Flujo

TypeScript

Sintaxis

Funciones Y Parámetros Tipados

TypeScript

Sintaxis

Funciones Flecha Y Contexto

TypeScript

Sintaxis

Enums

TypeScript

Sintaxis

Type Aliases Y Aserciones De Tipo

TypeScript

Sintaxis

Clases Y Objetos

TypeScript

Programación Orientada A Objetos

Interfaces Y Su Implementación

TypeScript

Programación Orientada A Objetos

Modificadores De Acceso Y Encapsulación

TypeScript

Programación Orientada A Objetos

Herencia Y Clases Abstractas

TypeScript

Programación Orientada A Objetos

Polimorfismo

TypeScript

Programación Orientada A Objetos

Decoradores Básicos

TypeScript

Programación Orientada A Objetos

Propiedades Y Métodos

TypeScript

Programación Orientada A Objetos

Inmutabilidad

TypeScript

Programación Funcional

Funciones Puras Y Efectos Secundarios

TypeScript

Programación Funcional

Funciones De Primera Clase

TypeScript

Programación Funcional

Funciones De Alto Orden

TypeScript

Programación Funcional

Conceptos Básicos E Inmutabilidad

TypeScript

Programación Funcional

Funciones De Primera Clase Y Orden Superior

TypeScript

Programación Funcional

Composición De Funciones

TypeScript

Programación Funcional

Métodos Funcionales De Arrays (Map, Filter, Reduce)

TypeScript

Programación Funcional

Tipos Literales Y Tipos Condicionales

TypeScript

Tipos Intermedios Y Avanzados

Tipos Genéricos Básicos

TypeScript

Tipos Intermedios Y Avanzados

Tipos De Unión E Intersección

TypeScript

Tipos Intermedios Y Avanzados

Tipos De Utilidad (Partial, Required, Pick, Etc)

TypeScript

Tipos Intermedios Y Avanzados

Unknown, Never Y Tipos Especiales

TypeScript

Tipos Intermedios Y Avanzados

Tipos Mapped

TypeScript

Tipos Intermedios Y Avanzados

Genéricos Con Clases E Interfaces

TypeScript

Tipos Intermedios Y Avanzados

Módulos

TypeScript

Namespaces Y Módulos

Namespaces

TypeScript

Namespaces Y Módulos

Resolución De Módulos

TypeScript

Namespaces Y Módulos

Exportación E Importación De Módulos

TypeScript

Namespaces Y Módulos

Introducción A Módulos

TypeScript

Namespaces Y Módulos

Testing Unitario En Typescript

TypeScript

Testing

Accede GRATIS a TypeScript y certifícate

En esta lección

Objetivos de aprendizaje de esta lección

  1. Comprender el concepto de inmutabilidad y su importancia en programación funcional.
  2. Conocer las ventajas de trabajar con objetos inmutables para facilitar el rastreo del estado de los objetos y reducir los efectos secundarios inesperados.
  3. Aprender a hacer objetos inmutables utilizando Object.freeze.
  4. Entender cómo los métodos inmutables de arrays, como map, filter, slice y concat, permiten trabajar con arrays sin modificar el array original.
  5. Saber cómo utilizar el modificador readonly en TypeScript para asegurar que una variable no se modifique después de su asignación inicial.