En el vasto universo del desarrollo de software, los objetos son la unidad fundamental que nos permite representar entidades del mundo real en forma de datos y comportamiento. Si las variables son palabras y las funciones son verbos, los objetos son los párrafos que dan sentido y estructura a nuestra narrativa programática. Un objeto es una colección de propiedades relacionadas, donde cada propiedad tiene un nombre (clave) y un valor. Los objetos en TypeScript no son meros contenedores pasivos; son entidades inteligentes que protegen la integridad de nuestra aplicación. TypeScript contiene todas las funciones de JavaScript e incluye tipado estático, lo que permite especificar tipos de datos para funciones en TypeScript, variables y clases, así como detectar errores en tiempo de compilación.
La creación de objetos es parte del ciclo de desarrollo de software. Dado que estamos en TypeScript, para la creación del objeto haremos que cumpla una determinada interfaz.
Definiendo Objetos con Clases
Las clases en TypeScript proporcionan una manera estructurada para definir objetos con propiedades y métodos asociados. Las clases son fundamentales en la programación orientada a objetos, ya que nos permiten definir objetos que encapsulan datos y comportamientos relacionados. Las clases de TypeScript proporcionan una forma clara y estructurada de organizar datos y comportamientos dentro de un objeto. Las clases son fundamentales en el lenguaje de programación TypeScript, que está basado en JavaScript. Proporcionan un método estructurado para definir objetos y aplicar la programación orientada a objetos (OOP). La sintaxis de las clases en TypeScript se asemeja a la de ECMAScript 6 (ES6) y es una versión extendida de la sintaxis de clases de JavaScript.
Declaración de una Clase
En TypeScript, puedes definir una clase utilizando la palabra clave class, seguida del nombre de la clase y un bloque de código que contiene sus miembros. Una clase puede contener varios elementos para definir la estructura y el comportamiento de los objetos. Las propiedades o properties determinan el estado de un objeto.
Por ejemplo, en una clase Persona, nombre: string y edad: number son propiedades de la clase. Se definen con un tipo de dato que especifica qué tipo de valores pueden almacenar.
Lea también: IVA 21% Excel
El Constructor
El constructor es un método especial que se invoca automáticamente al crear una nueva instancia de una clase. Su propósito principal es inicializar las propiedades del objeto con los valores proporcionados durante la instanciación. El constructor en TypeScript es un método especial que se llama al crear una instancia (un objeto) de una clase. Se utiliza para realizar la inicialización de las propiedades (properties) de un objeto. Básicamente, el constructor establece el estado inicial de una instancia.
- constructor: cada clase puede tener solo un constructor.
- parameter: Type: los parámetros pueden ser necesarios o no dependiendo de lo que la clase necesite hacer.
Por ejemplo, en la clase Person, el constructor acepta dos parámetros: firstName (nombre) y lastName (apellido). Al crear una instancia de esta clase, se pasan estos parámetros y el constructor inicializa las propiedades firstName y lastName de la instancia con los valores correspondientes. En este caso no hemos especificado ningún constructor, con lo que la clase (aunque no se vea) tiene su constructor por defecto.
Métodos de Clase
En TypeScript, los métodos son funciones que pueden definirse en las clases y aplicarse a sus instancias. Por ejemplo, saludar(): void es un método que no devuelve ningún valor (void) y que imprime un saludo en la consola. El Return Type es el tipo de datos que determina qué valor devuelve el método. El método getFullName sirve para crear el nombre completo de la persona y devolverlo. Recurre a los valores de las propiedades firstName y lastName que se han definido en la clase e inicializado en el constructor. Cuando se llama al método, concatena las dos cadenas y devuelve el nombre completo como una cadena o string. Para llamar a una propiedad o a un método en una instancia de una clase, utiliza el operador punto .
Instanciar una Clase
Una vez que tenemos una clase definida, podemos crear instancias de ella utilizando la palabra clave new. Cada instancia será un objeto separado que tiene sus propias propiedades y métodos. Por ejemplo, new Persona("Luis", 30) crea una nueva instancia de la clase Persona, llamando al constructor con los argumentos "Luis" y 30. El objeto person se genera utilizando la palabra clave new seguida del nombre de la clase y de los parámetros correspondientes. Luego, persona1.saludar() llama al método saludar del objeto persona1, que imprime un mensaje de saludo usando los valores de sus propiedades.
Conceptos Avanzados en Clases de TypeScript
Las clases de TypeScript tienen varios mecanismos para organizar y controlar la estructura y el comportamiento de los objetos.
Lea también: Guía IVA reducido
Visibilidad
La visibilidad en las clases de TypeScript controla el acceso a las propiedades y métodos dentro y fuera de la clase. El modificador private se refiere a propiedades y métodos que solo pueden llamarse dentro de la propia clase. En un ejemplo, socialSecurityNumber (número de la Seguridad Social) es una propiedad privada a la que solo puede accederse dentro de la clase Person.
Herencia
La herencia es un concepto fundamental en la programación orientada a objetos (POO) que se utiliza en TypeScript y en muchos otros lenguajes de programación web. Permite crear una nueva clase a partir de una clase base o superclase existente. En un ejemplo de código, la clase Dog (perro) hereda de la clase base Animal utilizando la palabra clave extends.
Propiedades de Solo Lectura (readonly)
Al utilizar la palabra clave readonly, puedes declarar propiedades de las clases de TypeScript o los objetos como solo lectura. En un ejemplo, la propiedad pi es de solo lectura y se inicializa en el constructor. Después de la inicialización, pi no puede modificarse.
Otras Formas de Declarar Objetos
Literales de Objeto
La forma más sencilla de crear un objeto es mediante un literal. Ahora podemos usar el objeto “invoiceLiteral”. En este caso, TypeScript crea un tipo anónimo que solo permite que marca sea un string, almacenamiento un number, y así sucesivamente. Para aplicaciones profesionales, rara vez confiamos solo en la inferencia.
Propiedades Opcionales
Cuando creas un tipo, TypeScript te va a exigir que el objeto que usas tenga todas las propiedades indicadas en el tipo. Con el tipado, puedes tener objetos user con las propiedades name, surname y age y de forma opcional address. No siempre conocemos todos los datos de un objeto al momento de su creación. Un consejo que se suele decir es que si tienes muchos objetos o tipos con propiedades opcionales, puede ser un síntoma de que necesites crear nuevos tipos que cubran esos casos y no un tipado muy general con muchas propiedades opcionales.
Lea también: ¿Cómo localizar tus XML del SAT?
Propiedades Dinámicas
Te voy a mostrar cómo asignar propiedades a un objeto de manera dinámica en TypeScript. En JavaScript nosotros podemos definir un objeto vacío en donde vamos agregando propiedades conforme va avanzando la aplicación. Pero nosotros en TypeScript no podemos hacer lo mismo ya que se genera un error. Entonces te voy a mostrar dos métodos que puedes utilizar para lograr esto. El primero es definiendo un tipo con propiedades dinámicas. Como aquí yo estoy definiendo el tipo de objeto en donde indico que la llave del objeto va a ser un «string» y el valor que va a contener también es un «string». Ya con esto, entonces yo puedo agregar todas las propiedades que yo quiera a este objeto sin tener que recibir un error. Esto hace que la programación sea más fácil, pero también corremos el riesgo de llamar una propiedad que no existe. Como este caso «nombre» me va a retornar un valor de indefinido. Otro método que podemos utilizar es el tipo de utilidad «Record».
