<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Israel Morales</title>
    <description>The latest articles on DEV Community by Israel Morales (@nixcko).</description>
    <link>https://dev.to/nixcko</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1099238%2Fcd25355f-06bb-4f29-b1bc-fe25c25b884d.jpg</url>
      <title>DEV Community: Israel Morales</title>
      <link>https://dev.to/nixcko</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nixcko"/>
    <language>en</language>
    <item>
      <title>Aplicando estrategias universales para resolver problemas de programación 🌐🛠️💡</title>
      <dc:creator>Israel Morales</dc:creator>
      <pubDate>Sat, 07 Dec 2024 07:03:34 +0000</pubDate>
      <link>https://dev.to/nixcko/aplicando-estrategias-universales-para-resolver-problemas-de-programacion-32ml</link>
      <guid>https://dev.to/nixcko/aplicando-estrategias-universales-para-resolver-problemas-de-programacion-32ml</guid>
      <description>&lt;p&gt;En el ámbito del diseño de programas informáticos 💻, es común encontrarse con situaciones complicadas 😵‍💫. Pero enfrentar estos problemas con un &lt;strong&gt;plan organizado&lt;/strong&gt; 🗺️ puede marcar la diferencia entre sentirse frustrado y lograr el éxito 🏆. En este escrito, analizaremos la aplicación de conceptos generales para solucionar problemas mencionados en el libro &lt;em&gt;"How to Solve It"&lt;/em&gt; de George Pólya 📖 en la creación &lt;strong&gt;back-end&lt;/strong&gt; de una página web utilizando Node.js 🚀.&lt;/p&gt;

&lt;p&gt;Te ayudaré a entender y resolver problemas paso a paso 🧩, utilizando ejemplos prácticos y tareas comunes.&lt;/p&gt;

&lt;p&gt;Referencia libro: &lt;a href="https://www.amazon.com/How-Solve-Mathematical-Princeton-Science/dp/069116407X?source=ps-sl-shoppingads-lpcontext&amp;amp;ref_=fplfs&amp;amp;psc=1&amp;amp;smid=ATVPDKIKX0DER&amp;amp;gQT=0" rel="noopener noreferrer"&gt;How To Solve It&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Introducción a la Metodología de Resolución de Problemas&lt;/strong&gt; 🛠️
&lt;/h2&gt;

&lt;p&gt;George Pólya propone un enfoque de &lt;strong&gt;cuatro pasos&lt;/strong&gt; para resolver problemas de manera estructurada:&lt;/p&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;Comprender el problema.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
2️⃣ &lt;strong&gt;Elaborar un plan.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
3️⃣ &lt;strong&gt;Ejecutar el plan.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
4️⃣ &lt;strong&gt;Revisar la solución.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Estos pasos, aunque originados en el ámbito de las matemáticas 🧮, son altamente aplicables al desarrollo de software 💻. Vamos a desglosar cada uno con ejemplos prácticos en Node.js.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;Comprender el problema&lt;/strong&gt; 🔍
&lt;/h2&gt;

&lt;p&gt;Antes de comenzar a programar, es crucial entender qué estás resolviendo. Pólya lo describe como el proceso de &lt;strong&gt;desglosar el problema en preguntas clave&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Caso práctico: API para la gestión de usuarios&lt;/strong&gt; 👥
&lt;/h3&gt;

&lt;p&gt;Imagina que un cliente solicita una API para manejar usuarios con las siguientes características:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crear, leer, actualizar y eliminar usuarios (CRUD).
&lt;/li&gt;
&lt;li&gt;Validar los datos de entrada ✅.
&lt;/li&gt;
&lt;li&gt;Asegurar que las contraseñas estén encriptadas 🔒.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Preguntas clave:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;¿Qué datos se manejarán?&lt;/strong&gt;
Información básica como nombre, email y contraseña.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;¿Qué restricciones existen?&lt;/strong&gt;
El email debe ser único 📧, y la contraseña debe almacenarse de forma segura 🔐.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;¿Qué herramientas se usarán?&lt;/strong&gt;
Node.js, Express.js y MongoDB ⚙️.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Acciones iniciales:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
📌 Esquematiza los requerimientos en un diagrama o lista.&lt;br&gt;&lt;br&gt;
📌 Asegúrate de entender los flujos básicos: ¿qué sucede cuando un usuario se registra, inicia sesión o elimina su cuenta?&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;Elaborar un Plan&lt;/strong&gt; 🗺️
&lt;/h2&gt;

&lt;p&gt;Una vez que entiendes el problema, diseña un plan para resolverlo. Aquí es donde conectas los datos de entrada con el resultado esperado 🎯.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Plan para la API:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;Configurar el entorno de desarrollo:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
   Instalar dependencias y configurar un servidor básico con Express.&lt;br&gt;&lt;br&gt;
2️⃣ &lt;strong&gt;Crear un modelo de datos:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
   Usar Mongoose para definir un esquema de usuario.&lt;br&gt;&lt;br&gt;
3️⃣ &lt;strong&gt;Implementar operaciones CRUD:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
   Desarrollar rutas para registrar, obtener, actualizar y eliminar usuarios.&lt;br&gt;&lt;br&gt;
4️⃣ &lt;strong&gt;Asegurar el sistema:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
   Validar datos con Joi y encriptar contraseñas con bcrypt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;1. Inicia un servidor Express.
2. Configura un modelo de usuario con Mongoose.
3. Crea rutas:
   - POST /register: Registrar un usuario.
   - GET /users: Obtener todos los usuarios.
   - PUT /users/:id: Actualizar un usuario.
   - DELETE /users/:id: Eliminar un usuario.
4. Asegura el sistema con validaciones y encriptación.
5. Prueba el sistema con herramientas como Postman.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este plan es tu &lt;strong&gt;mapa&lt;/strong&gt; 🗺️. Aunque pueda cambiar durante el desarrollo, te ayuda a mantenerte enfocado 🔦.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Ejecutar el Plan&lt;/strong&gt; 🏗️
&lt;/h2&gt;

&lt;p&gt;Ahora es el momento de implementar el código paso a paso 🧑‍💻, asegurándote de validar cada parte del proceso ✅.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Configuración del Servidor:&lt;/strong&gt; 🌐
&lt;/h3&gt;

&lt;p&gt;Comienza configurando Express y MongoDB.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mongoose&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dotenv&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Conectar a MongoDB&lt;/span&gt;
&lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MONGO_URI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;useNewUrlParser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;useUnifiedTopology&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Conectado a MongoDB&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error al conectar a MongoDB:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Servidor corriendo en puerto 3000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Modelo de Usuario:&lt;/strong&gt; 👤
&lt;/h3&gt;

&lt;p&gt;Define un esquema básico con Mongoose.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;unique&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userSchema&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Registrar Usuarios:&lt;/strong&gt; 📝
&lt;/h3&gt;

&lt;p&gt;Implementa la ruta para registrar nuevos usuarios, encriptando la contraseña 🔐.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bcrypt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./models/User&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/register&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Todos los campos son obligatorios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hashedPassword&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hashedPassword&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Usuario registrado exitosamente&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; 
  &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error interno del servidor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Revisar la Solución&lt;/strong&gt; 🔎
&lt;/h2&gt;

&lt;p&gt;La revisión es fundamental para garantizar que la solución sea eficiente, segura y escalable 🚀.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Preguntas de revisión:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;¿El sistema es seguro?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿Se validan los datos correctamente?
&lt;/li&gt;
&lt;li&gt;¿Las contraseñas están protegidas?
2️⃣ &lt;strong&gt;¿El código es escalable?&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;¿Puedes agregar nuevas funciones sin romper las existentes?
3️⃣ &lt;strong&gt;¿Hay margen para optimizaciones?&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Agrega middleware para manejar errores.
&lt;/li&gt;
&lt;li&gt;Usa &lt;code&gt;Winston&lt;/code&gt; para registros detallados 📋.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Mejoras recomendadas:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Implementa autenticación con JWT 🔑.
&lt;/li&gt;
&lt;li&gt;Divide el código en controladores y rutas separados 🗂️.
&lt;/li&gt;
&lt;li&gt;Usa un sistema de caché como Redis para mejorar el rendimiento ⚡.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusión&lt;/strong&gt; 🎯
&lt;/h2&gt;

&lt;p&gt;Resolver problemas en &lt;strong&gt;back-end&lt;/strong&gt; con Node.js requiere tanto habilidades técnicas como un enfoque estructurado 🛠️. Aplicando los principios de &lt;em&gt;"How to Solve It"&lt;/em&gt; 📘, puedes abordar cualquier desafío con confianza 💪, dividirlo en partes manejables 🧩 y crear soluciones eficientes 🚀.&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>learning</category>
    </item>
    <item>
      <title>Tipos en TypeScript: De lo básico a lo avanzado 🛠️🚀</title>
      <dc:creator>Israel Morales</dc:creator>
      <pubDate>Mon, 02 Dec 2024 20:15:14 +0000</pubDate>
      <link>https://dev.to/nixcko/tipos-en-typescript-de-lo-basico-a-lo-avanzado-1f4k</link>
      <guid>https://dev.to/nixcko/tipos-en-typescript-de-lo-basico-a-lo-avanzado-1f4k</guid>
      <description>&lt;p&gt;TypeScript se caracteriza por su sistema de &lt;strong&gt;tipos fuerte&lt;/strong&gt; 🛡️, que te permite especificar de forma clara y precisa cómo deben usarse los datos en tu aplicación 📋. Desde elementos básicos como palabras (&lt;code&gt;string&lt;/code&gt;) y números (&lt;code&gt;number&lt;/code&gt;), hasta herramientas más avanzadas como &lt;strong&gt;tipos de unión&lt;/strong&gt; y &lt;strong&gt;enumeraciones&lt;/strong&gt;, TypeScript te asegura que puedas escribir código de manera más &lt;strong&gt;segura&lt;/strong&gt; y &lt;strong&gt;predecible&lt;/strong&gt; 🚀.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;¿Cómo se utiliza el sistema de tipos en TypeScript?&lt;/strong&gt; 🤔
&lt;/h2&gt;

&lt;p&gt;TypeScript añade protección de tipos a JavaScript con una sintaxis fácil ✍️ pero poderosa 💪, aquí algunas ideas importantes:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Anotaciones de tipo en variables&lt;/strong&gt; 🖋️
&lt;/h3&gt;

&lt;p&gt;Para especificar el tipo de una variable, usa el operador &lt;code&gt;:&lt;/code&gt; después del nombre de la variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;activo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Tipado en funciones&lt;/strong&gt; 🛠️
&lt;/h3&gt;

&lt;p&gt;Especifica el tipo de los parámetros y el tipo del valor de retorno:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;saludar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Hola, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;📝 &lt;code&gt;nombre: string&lt;/code&gt;: El parámetro debe ser una cadena.
&lt;/li&gt;
&lt;li&gt;📝 &lt;code&gt;: string&lt;/code&gt;: La función devuelve una cadena.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Uso de tipos básicos en estructuras&lt;/strong&gt; 📂
&lt;/h3&gt;

&lt;p&gt;Puedes usar tipos en &lt;strong&gt;objetos&lt;/strong&gt;, &lt;strong&gt;arreglos&lt;/strong&gt; y &lt;strong&gt;tuplas&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;usuario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;coordenada&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Tipos básicos en TypeScript&lt;/strong&gt; 🔤
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;string&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;El tipo string se utiliza para manejar texto 📝.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;mensaje&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hola, TypeScript&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mensaje&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;span class="c1"&gt;// Hola, TypeScript&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;number&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;TypeScript utiliza un solo tipo para todos los números (enteros y decimales) 🔢.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;pi&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;3.14159&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Este tipo representa valores &lt;code&gt;true&lt;/code&gt; o &lt;code&gt;false&lt;/code&gt; ✅❌.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;esActivo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;completado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Tipos avanzados en TypeScript&lt;/strong&gt; 🚀
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Unión&lt;/strong&gt; 🔗
&lt;/h3&gt;

&lt;p&gt;Los union types permiten que una variable tenga más de un tipo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ✅ Válido&lt;/span&gt;
&lt;span class="nx"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Texto&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ✅ También válido&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cómo se usa en una función:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;imprimirValor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dato&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;dato&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Texto: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;dato&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; 
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Número: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;dato&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Literales&lt;/strong&gt; 🏷️
&lt;/h3&gt;

&lt;p&gt;Los tipos literales restringen una variable a valores específicos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;respuesta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sí&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;quizás&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sí&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ✅ Válido&lt;/span&gt;
&lt;span class="c1"&gt;// respuesta = "tal vez"; // ❌ Error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Tuplas&lt;/strong&gt; 📦
&lt;/h3&gt;

&lt;p&gt;Las tuplas son arreglos con un número fijo de elementos, donde cada posición tiene un tipo específico.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="c1"&gt;// persona = [30, "Alice"]; // ❌ Error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Enums&lt;/strong&gt; 📋
&lt;/h3&gt;

&lt;p&gt;Los enums definen un conjunto de constantes con nombre.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;EstadoPedido&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;Pendiente&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;Enviado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;Entregado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;EstadoPedido&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;EstadoPedido&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Enviado&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Sintaxis adicional para trabajar con tipos&lt;/strong&gt; 🛠️
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Objetos&lt;/strong&gt; 🏗️
&lt;/h3&gt;

&lt;p&gt;Para manejar objetos complejos, define su estructura con anotaciones de tipo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;producto&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;precio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Laptop&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;precio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Propiedades opcionales&lt;/strong&gt; ❓
&lt;/h3&gt;

&lt;p&gt;Usa &lt;code&gt;?&lt;/code&gt; para indicar que una propiedad es opcional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Usuario&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Opcional&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;usuario1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Usuario&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// ✅ Válido&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;usuario2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Usuario&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bob&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bob@example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// ✅ Válido&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Uso de readonly&lt;/strong&gt; 🔒
&lt;/h3&gt;

&lt;p&gt;El modificador readonly hace que una propiedad sea inmutable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Punto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;punto&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Punto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="c1"&gt;// punto.x = 15; // ❌ Error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusión&lt;/strong&gt; 🎯
&lt;/h2&gt;

&lt;p&gt;El sistema de tipos de TypeScript es una herramienta muy útil 🛠️ para escribir código de forma &lt;strong&gt;segura&lt;/strong&gt;, &lt;strong&gt;clara&lt;/strong&gt; y &lt;strong&gt;fácil de mantener&lt;/strong&gt; 🔒✨. Comprender la &lt;strong&gt;estructura fundamental&lt;/strong&gt; para establecer valores y manejar tipos te ayudará a sacarle el mayor provecho a las capacidades de TypeScript, ya sea en proyectos sencillos o en aplicaciones más complejas 🚀.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cómo empezar con TypeScript usando Vite: Configuración y compilación simplificadas 🎯</title>
      <dc:creator>Israel Morales</dc:creator>
      <pubDate>Mon, 02 Dec 2024 17:37:18 +0000</pubDate>
      <link>https://dev.to/nixcko/como-empezar-con-typescript-usando-vite-configuracion-y-compilacion-simplificadas-53k4</link>
      <guid>https://dev.to/nixcko/como-empezar-con-typescript-usando-vite-configuracion-y-compilacion-simplificadas-53k4</guid>
      <description>&lt;p&gt;Vite es una herramienta actualizada que ayuda a empezar proyectos web de forma más rápida y sencilla ⚡. Con Vite y TypeScript, puedes hacer aplicaciones rápidamente con una configuración previa 🛠️, perfecta para quienes quieren algo simple y eficiente. En este texto, descubrirás cómo preparar un proyecto TypeScript con Vite y empezar a trabajar en poco tiempo 🚀.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 1: Instalación de Node.js 🖥️
&lt;/h2&gt;

&lt;p&gt;Asegúrate de tener Node.js instalado en tu sistema. Puedes descargarlo desde &lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt; 🌐. Esto instalará automáticamente npm (Node Package Manager) 📦, que usaremos para instalar Vite.&lt;/p&gt;

&lt;p&gt;Para verificar la instalación, ejecuta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;-v&lt;/span&gt;
npm &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Si ves las versiones instaladas, ¡estás listo para continuar!&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 2: Crear un nuevo proyecto con Vite 🆕
&lt;/h2&gt;

&lt;p&gt;Ejecuta el siguiente comando para crear un proyecto nuevo con Vite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create vite@latest my-typescript-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sigue las instrucciones:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;✏️ Selecciona el nombre del proyecto o presiona Enter para usar &lt;code&gt;my-typescript-app&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;📚 Selecciona el framework: Elige &lt;code&gt;Vanilla&lt;/code&gt; si no estás usando un framework como React o Vue.
&lt;/li&gt;
&lt;li&gt;🧑‍💻 Selecciona el lenguaje: Elige &lt;code&gt;TypeScript&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esto generará una estructura de proyecto con soporte para TypeScript 🎉.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 3: Instalar dependencias 📥
&lt;/h2&gt;

&lt;p&gt;Accede al directorio del proyecto recién creado y ejecuta el comando para instalar las dependencias:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;my-typescript-app
npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Esto instalará todo lo necesario para que tu proyecto funcione correctamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 4: Estructura inicial del proyecto 🗂️
&lt;/h2&gt;

&lt;p&gt;Después de la instalación, la estructura del proyecto se verá así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/my-typescript-app
  /node_modules
  /src
    main.ts
    style.css
  index.html
  tsconfig.json
  package.json
  vite.config.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📝 Archivos clave:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;main.ts&lt;/code&gt;: El punto de entrada principal para tu aplicación TypeScript.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tsconfig.json&lt;/code&gt;: Configuración del compilador TypeScript.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;vite.config.ts&lt;/code&gt;: Configuración personalizada de Vite.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Paso 5: Configuración de TypeScript ⚙️
&lt;/h2&gt;

&lt;p&gt;Vite ya crea un archivo &lt;code&gt;tsconfig.json&lt;/code&gt; listo para usar. Si necesitas personalizarlo, aquí tienes un ejemplo básico:&lt;/p&gt;

&lt;p&gt;Archivo &lt;code&gt;tsconfig.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"compilerOptions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ESNext"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"module"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ESNext"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"moduleResolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Node"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"strict"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"esModuleInterop"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"skipLibCheck"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"forceConsistentCasingInFileNames"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"include"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Esto asegura que tu proyecto sea compatible con las características modernas de JavaScript y TypeScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 6: Ejecutar el servidor de desarrollo 🚀
&lt;/h2&gt;

&lt;p&gt;Inicia el servidor de desarrollo de Vite con el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔗 Esto abrirá tu aplicación en &lt;a href="http://localhost:5173" rel="noopener noreferrer"&gt;http://localhost:5173&lt;/a&gt;. Los cambios que realices en el código se reflejarán instantáneamente gracias a la recarga en caliente 🔄.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 7: Escribir tu primer archivo TypeScript ✍️
&lt;/h2&gt;

&lt;p&gt;Abre &lt;code&gt;src/main.ts&lt;/code&gt; y modifica el contenido para probar TypeScript:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Archivo&lt;/em&gt; &lt;code&gt;src/main.ts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;greet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Hola, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;! Bienvenido a TypeScript con Vite.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Desarrollador&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🖱️ Guarda el archivo y revisa la consola del navegador para ver el mensaje ✨.&lt;/p&gt;

&lt;h2&gt;
  
  
  Errores comunes y soluciones 🛠️
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Error al iniciar el servidor: &lt;code&gt;EADDRINUSE&lt;/code&gt;&lt;/strong&gt;
🔧 &lt;strong&gt;Solución:&lt;/strong&gt; Cambia el puerto en &lt;code&gt;vite.config.ts&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript no reconoce un módulo externo:&lt;/strong&gt;
🔧 &lt;strong&gt;Solución:&lt;/strong&gt; Instala los tipos necesarios con:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @types/nombre-del-paquete
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusión 🎯
&lt;/h2&gt;

&lt;p&gt;Vite simplifica enormemente el proceso de iniciar un proyecto TypeScript. Con su rapidez 🚀 y compatibilidad moderna 🛡️, puedes enfocarte en escribir código en lugar de lidiar con configuraciones complejas 🧘. Ahora estás preparado para crear aplicaciones más fuertes y efectivas 💪.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>vite</category>
      <category>node</category>
    </item>
    <item>
      <title>¿Qué es TypeScript y por qué deberías usarlo? 🛠️💻</title>
      <dc:creator>Israel Morales</dc:creator>
      <pubDate>Tue, 26 Nov 2024 02:35:22 +0000</pubDate>
      <link>https://dev.to/nixcko/que-es-typescript-y-por-que-deberias-usarlo-8e5</link>
      <guid>https://dev.to/nixcko/que-es-typescript-y-por-que-deberias-usarlo-8e5</guid>
      <description>&lt;p&gt;TypeScript es una poderosa extensión de JavaScript que ha ganado popularidad por hacer el desarrollo web y de aplicaciones más seguro 🔒, escalable 📈 y eficiente ⚡. Exploraremos qué es TypeScript, por qué considerarlo para tu próximo proyecto y cómo puede mejorar tu experiencia de desarrollo 🚀.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué es TypeScript? 🤔
&lt;/h2&gt;

&lt;p&gt;TypeScript es un tipo de lenguaje de programación creado por Microsoft 🏢 y disponible para todos 🌐. Es una versión avanzada de JavaScript que tiene todas las funciones de JavaScript y añade características extra, por ejemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tipos estáticos&lt;/strong&gt; 🛡️: Proporciona un sistema de tipos que te permite definir claramente la estructura de tus datos.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Funciones avanzadas&lt;/strong&gt; ⚙️: Incluye características modernas de programación como genéricos, interfaces y clases.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compatibilidad con JavaScript&lt;/strong&gt; ✅: Cualquier código JavaScript válido es también un código TypeScript válido.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En esencia, TypeScript actúa como un "cinturón de seguridad" 🦺 para JavaScript, ayudándote a evitar errores y a escribir código más predecible 📋.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por qué usar TypeScript? 💡
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1 - Captura de errores temprana&lt;/strong&gt; 🕵️‍♂️
&lt;/h3&gt;

&lt;p&gt;TypeScript te ayuda a identificar errores en tu código antes de que se ejecute. Por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// name = 42; // Error: el valor debe ser una cadena.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;2 - Código más legible y mantenible&lt;/strong&gt; 📖
&lt;/h3&gt;

&lt;p&gt;El uso de anotaciones de tipo actúa como documentación incorporada 📜 para tu código, haciéndolo más fácil de entender para ti y para otros desarrolladores 👥.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Hola, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Al ver esta función, es evidente que &lt;code&gt;name&lt;/code&gt; debe ser una cadena y que la función devuelve una cadena.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3 - Soporte para herramientas avanzadas&lt;/strong&gt; 🛠️
&lt;/h3&gt;

&lt;p&gt;TypeScript mejora las herramientas de desarrollo, ofreciendo características como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✍️ Autocompletado de código
&lt;/li&gt;
&lt;li&gt;🛡️ Verificación de tipos en tiempo real
&lt;/li&gt;
&lt;li&gt;🔄 Refactorización segura
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estas características te ayudan a escribir código más rápido y con menos errores 🚀.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4 - Compatibilidad con proyectos existentes&lt;/strong&gt; 🔄
&lt;/h3&gt;

&lt;p&gt;Como TypeScript se compila en JavaScript, puedes usarlo en cualquier proyecto que ya utilice JavaScript. Es compatible con la mayoría de los navegadores y plataformas 🌍, lo que facilita su adopción progresiva.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparación: JavaScript vs TypeScript ⚔️
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Características&lt;/th&gt;
&lt;th&gt;JavaScript 🔵&lt;/th&gt;
&lt;th&gt;TypeScript 🟣&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sistema de tipos&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dinámico&lt;/td&gt;
&lt;td&gt;Estático&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compatibilidad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Universal&lt;/td&gt;
&lt;td&gt;Se compila a JavaScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Soporte para OOP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limitado&lt;/td&gt;
&lt;td&gt;Completo con clases, interfaces y genéricos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Verificación de errores&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Solo en tiempo de ejecución&lt;/td&gt;
&lt;td&gt;En tiempo de compilación&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Ejemplo práctico: JavaScript vs TypeScript 🧑‍💻
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;JavaScript&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Resultado: "23" (comportamiento inesperado)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;TypeScript&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// console.log(add(2, "3")); // Error: el segundo argumento debe ser un número.&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Resultado: 5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este ejemplo, TypeScript evita errores al asegurarse de que los argumentos sean del tipo correcto ✅.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Cuándo deberías usar TypeScript? 🕒
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Proyectos a gran escala&lt;/strong&gt; 🏗️: Cuando trabajas con equipos grandes o código complejo, TypeScript reduce los errores y mejora la colaboración 🤝.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aplicaciones modernas&lt;/strong&gt; 🌟: Si utilizas frameworks como React, Angular o Vue.js, TypeScript proporciona una capa adicional de seguridad.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proyectos a largo plazo&lt;/strong&gt; 📆: TypeScript facilita el mantenimiento y la expansión del código con el tiempo.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusión 🎯
&lt;/h2&gt;

&lt;p&gt;TypeScript no solo incrementa la seguridad de tu código 🔒, sino que también potencia la productividad y el proceso de desarrollo ⚡. Al implementar TypeScript, adquirirás herramientas sofisticadas 🛠️, un sólido sistema de tipos 🧱 y la seguridad de identificar fallos antes de que se produzcan 🚦.  &lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Creando tu Propio Entorno Local para Desarrollo en HTML, CSS y JavaScript</title>
      <dc:creator>Israel Morales</dc:creator>
      <pubDate>Fri, 16 Jun 2023 05:03:48 +0000</pubDate>
      <link>https://dev.to/nixcko/construye-tu-espacio-de-desarrollo-local-para-html-css-y-javascript-2ef1</link>
      <guid>https://dev.to/nixcko/construye-tu-espacio-de-desarrollo-local-para-html-css-y-javascript-2ef1</guid>
      <description>&lt;p&gt;¿Deseas probar y experimentar con tus proyectos web (HTML, CSS y JavaScript) sin depender de una conexión a Internet? Este artículo te orientará en la configuración de un entorno localhost usando NodeJS y http-server, lo cual te permitirá ejecutar tus proyectos web de forma offline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducción a NodeJS
&lt;/h2&gt;

&lt;p&gt;NodeJS es un entorno de ejecución para JavaScript basado en el motor V8 de Chrome. Te permite ejecutar código JavaScript fuera de un navegador, ideal para desarrollar aplicaciones de servidor, y en nuestro caso, servir archivos web localmente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beneficios de Usar NodeJS para un Entorno Localhost
&lt;/h2&gt;

&lt;p&gt;NodeJS ofrece un módulo HTTP integrado que simplifica la creación de un servidor web, facilitando la prueba y depuración de proyectos web en un entorno local antes de su implementación en un servidor en vivo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalación de NodeJS y npm
&lt;/h2&gt;

&lt;p&gt;Para verificar si ya tienes NodeJS y npm, abre tu terminal (o CMD en Windows) y ejecuta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node -v
npm -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si estos comandos muestran números de versión, ya están instalados. Si no, descarga &lt;a href="https://nodejs.org/es" rel="noopener noreferrer"&gt;NodeJS&lt;/a&gt; desde su sitio web oficial y sigue las instrucciones de instalación. Luego, verifica la instalación repitiendo los comandos anteriores.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuración de http-server
&lt;/h2&gt;

&lt;p&gt;Con NodeJS y npm ya instalados, puedes instalar &lt;code&gt;http-server&lt;/code&gt; globalmente. En tu terminal o CMD, ejecuta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g http-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esta acción instalará &lt;code&gt;http-server&lt;/code&gt; de manera global, permitiendo su uso en cualquier directorio.&lt;/p&gt;

&lt;p&gt;Para servir tus archivos web, navega en la terminal al directorio de tu proyecto con el comando &lt;code&gt;cd&lt;/code&gt; y luego inicia el servidor con:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verás un mensaje en la terminal indicando que el servidor está activo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accediendo a tu Proyecto Local
&lt;/h2&gt;

&lt;p&gt;Con el servidor en funcionamiento, abre tu navegador y visita &lt;code&gt;http://localhost:8080&lt;/code&gt; para ver tu proyecto en acción.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Configurar un entorno localhost con NodeJS y http-server es esencial para cualquier desarrollador web, ya que te permite probar y depurar proyectos offline. Esta habilidad asegura que tus proyectos funcionen correctamente antes de su despliegue en un servidor en vivo.&lt;/p&gt;

&lt;p&gt;Si tienes alguna pregunta o comentario, no dudes en dejarlos en los comentarios.&lt;/p&gt;

&lt;p&gt;¡Gracias por leer y nos vemos en el próximo artículo!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>español</category>
    </item>
  </channel>
</rss>
