Primer componente de Vue con TypeScript

Crear proyecto de Vue con TypeScript

En este post te mostraré cómo crear un proyecto de Vue usando el lenguaje de programación TypeScript en lugar de JavaScript.

Como sabemos (en términos simples) TS es como JS mejorado; sobre todo por eso de los tipos (tipado fuerte) que previene errores como sumar números y cadenas, etcétera.

Instalación de la Vue CLI

La CLI va a permitirnos generar proyectos de Vue, así como su estructura, de una manera rápida y fácil.

Si no cuentas con la CLI, instala NPM y después ejecuta:

npm install -g @vue/cli

Crear proyecto

Ahora abre la terminal y dirígete a la carpeta padre de tu futuro proyecto. Ejecuta:

vue create nombre_del_proyecto

En mi caso voy a comenzar un sistema de una fábrica textil así que:

vue create sistema-textil

Se comenzará a crear el proyecto (dentro de la carpeta que llevará el mismo nombre) y se preguntarán algunas cosas.

Configuración del proyecto

Se preguntará cuál preset usar, selecciona Manually select features. Ahí, marca con la tecla de espacio o spacebar lo que necesites. Obviamente debes seleccionar TypeScript. En mi caso también seleccioné el Router.

Cuando pregunte si deseamos usar Class-Style component syntax seleccionamos que no, pues es un poco más complejo de manejar.

Después, en las siguientes preguntas (y todo lo demás) queda así:

Vue CLI v3.0.4
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, TS, Router, Linter
? Use class-style component syntax? No
? Use Babel alongside TypeScript for auto-detected polyfills? Yes
? Use history mode for router? (Requires proper server setup for index fallback in production) No
? Pick a linter / formatter config: TSLint
? Pick additional lint features: Lint on save
? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? In package.json
? Save this as a preset for future projects? Yes
? Save preset as: typescript-vue-router

Con eso se va a generar el proyecto, instalar las dependencias, etcétera:

Generando proyecto de Vue con TypeScript - Instalación de dependencias
Generando proyecto de Vue con TypeScript – Instalación de dependencias

Ahora basta con hacer un cd nombre_del_proyecto y luego ejecutar npm run serve. Se mostrará el aviso de que la app está escuchando el puerto 8080 y si lo visitamos:

Vista del proyecto Vue JS + TypeScript
Vista del proyecto Vue JS + TypeScript

Estructura del proyecto

El proyecto se ve como en la imagen. Lo que hay que notar es que el router está en router.ts, los componentes en components, y que los componentes siguen siendo archivos con extensión vue.

Estructura del proyecto Vue con TypeScript
Estructura del proyecto Vue con TypeScript

Además, el archivo main.ts es el que monta la app; y también vemos algunos archivos de configuración como el tslint.json que indica cómo “lintear” (no recuerdo qué es lint, pero es algo como verificar que todo siga determinado estilo) el TypeScript.

Creando nuestro primer componente con TypeScript

Lo bueno de TypeScript es que podemos escribir JavaScript dentro del mismo; es decir, podríamos escribir totalmente JavaScript e ir adoptando TS poco a poco.

Creamos un archivo llamado PrimerComponente dentro de components, con el siguiente código:

<template>
    <div>
        <h1>Vue con TypeScript</h1>
        <button @click="aumentarContador">Aumentar</button>
        <h2>Contador: {{contador}}</h2>
    </div>
</template>

<script lang="ts">
  import Vue from 'vue';

  export default Vue.extend({
    name: 'PrimerComponente',
    data: () => ({
      contador: 0
    }),
    methods: {
      aumentarContador() {
        this.contador++;
      }
    }
  });
</script>

<style scoped>

</style>

Es un componente simple que aumentará un contador.

Se puede observar que la sintaxis no cambia mucho; solo que ahora usamos <script lang="ts">. Ahora vamos a router.ts e importamos al componente:

import PrimerComponente from './components/PrimerComponente.vue';

Lo registramos dentro de routes:

//...
{
  path: '/primer_componente',
  name: 'primer_componente',
  component: PrimerComponente,
},
//...

Al final el código (del enrutador) queda así:

import Vue from 'vue';
import Router from 'vue-router';
import Home from './views/Home.vue';
import PrimerComponente from './components/PrimerComponente.vue'; // <-- Importar aquí

Vue.use(Router);

export default new Router({
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home,
    },
    // Definir ruta:                                                                         
    {
      path: '/primer_componente',
      name: 'primer_componente',
      component: PrimerComponente,
    },
    {
      path: '/about',
      name: 'about',
      // route level code-splitting
      // this generates a separate chunk (about.[hash].js) for this route
      // which is lazy-loaded when the route is visited.
      component: () => import(/* webpackChunkName: "about" */ './views/About.vue'),
    },
  ],
});

Si visitamos esa ruta, se verá el componente:

Primer componente de Vue con TypeScript
Primer componente de Vue con TypeScript

Una pequeña ventaja de TypeScript

Como lo dije, una ventaja son los tipos. Podemos ejemplificarlo intentando sumar una cadena a un entero en el método aumentarContador; según el editor que uses el error se puede mostrar de distinta manera (aunque siempre terminará en la terminal) y en mi caso se ve así:

Comprobación de tipos con TypeScript en Vue JS
Comprobación de tipos con TypeScript en Vue JS

Una pequeña ayuda, lo sé; pero en tipos más complejos es una ventaja todavía mayor.

Conclusión

Espero que no se haya olvidado algo. Así de simple es programar con Vue pero usando TypeScript. Las otras librerías, estilos, etcétera como Buefy pueden usarse sin mayor complicación.

Si quieres puedes leer mis otros artículos sobre Vue JS.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *