Preparar mi entorno para TypeScript

En mi caso particular voy a utilizar Neovim como entorno de desarrollo. Simplemente por una cuestión práctica, y es que es esta herramienta la que estoy empleando con otros lenguajes de programación. Por supuesto, que no es el único editor, ni la única herramienta. Incluso te diría que probablemente no sea la herramienta más cómoda, sobre todo si no la conoces. Aquí cada uno tiene que decidir que es lo que quiere hacer y como lo quiere hacer. Mi recomendación, que es básicamente la misma que me hago a mi mismo en la mayoría de los casos, es que sigas a la mayoría. Es decir, que utilices el mismo editor que el que utiliza la mayoría. Esto te lo recomiendo así, porque es mas fácil que ese software se mantenga, encontrarás mucho mas soporte y seguro que te encuentras más cómodo. Yo como te digo, y en mi caso, voy a seguir con Neovim. Así, que si quieres utilizar mi configuración, te recomiendo que le des un vistazo a mis dotfiles, donde encontrarás la configuración completa. Sin embargo, aquí quiero darte algunas pistas de la configuración particularizada de TypeScript para preparar mi entorno de programación.

Preparar mi entorno de programación para TypeScript

Instalando Node

Seguramente ya tengas instalado Node, en el caso de que estés utilizando Neovim, o incluso si no lo estás utilizando. Pero, en cualquier caso, lo que deberías hacer es ejecutar el siguiente comando en una terminal,

sudo pacman -S nodejs npm

Node Version Manager

En el caso de que quieras, o necesites instalar diferentes versiones de Node, puedes utilizar NVM, Node Version Manager. Este paquete se encuentra en los repositorios AUR, así que,

paru -S nvm

Y para completar tu configuración, tienes que añadir lo siguiente a tu .zshrc o a tu .bashrc, dependiendo de la shell que estés utilizando,

source /usr/share/nvm/init-nvm.sh

Ahora para ver las versiones que hay disponibles, puedes utilizar el siguiente comando,

nvm list-remote

Y otras opciones realmente interesantes y a tener en cuenta son,

  • nvm ls lista las versiones instaladas
  • nvm install node instala la última versión
  • nvm install --lts instala la última versión estable
  • nvm use <version> establece la versión por defecto

Instalar paquetes de forma global

Para instalar paquete de Node, de forma global, y sin necesidad de adquirir derechos de administrador, tienes que ejecutar la siguiente instrucción,

npm config set prefix '~/.local/'

Instalar typescript

Dado que voy a utilizar Typescript, en todas partes, la cuestión es instalarlo de forma global. Para ello, ejecuto lo siguiente,

npm install -g typescript

Ahora es posible ver la versión de Typescript que he instalado. Solo tengo que ejecutar,

tsc -v

Si quiere instalar Typescript en un proyecto, tengo que hacerlo de la siguiente forma,

npm install typescript --save-dev

Crear un proyecto

mkdir proyecto
tsc --init 

El siguiente paso es realizar algunos cambios en el recién creado tsconfig.json, en concreto, se trata de modificar las siguientes opciones,

"outDir": "./build"
"rootDir": "./src"

Mejorar nuestra productividad en el desarrollo

npm init --yes
npm install --g nodemon concurrently

En el archivo package.json, modificar scripts de la siguiente forma,

"scripts": {
    "start:build": "tsc -w",
    "start:run": "nodemon build/app.js",
    "start": "concurrently npm:start:*"
},

Finalmente, con el objeto de facilitarme la vida, hice un sencillo script que resuelve todas estas cosillas de golpe, así como algunas ayudas auxiliares que aprovecharé.

#!/usr/bin/env bash

function new_typescript(){
    NAME="$1"
    if [[ -z "$NAME" ]]; then
        exit 1
    fi
    mkdir -p "$NAME"/{src,build}
    cd "$NAME" || exit
    cat << EOF > package.json
{
    "name": "$NAME",
    "version": "1.0.0",
    "main": "build/app.js",
    "dependencies": {
    },
    "devDependencies": {},
    "scripts": {
        "start:build": "tsc -w",
        "start:run": "nodemon build/app.js",
        "start": "concurrently npm:start:*"
    },
    "keywords": [],
    "author": "Lorenzo Carbonell <a.k.a atareao>",
    "license": "MIT",
    "description": ""

}
EOF
    npm install typescript \
                eslint \
                @typescript-eslint/parser \
                @typescript-eslint/eslint-plugin \
                --save-dev
    cat << EOF > tsconfig.json
{
    "compilerOptions": {
        "target": "es2016",
        "module": "commonjs",
        "rootDir": "./src",
        "outDir": "./build",
        "esModuleInterop": true,
        "forceConsistentCasingInFileNames": true,
        "strict": true,
        "skipLibCheck": true
    }
}
EOF
    cat << EOF > .justfile
default:
    just --list
start:
    npm start
install package:
    npm install {{ package }}
uninstall package:
    npm until {{package}}
EOF
    cat << EOF > ./src/app.ts
    console.log("Hello World!");
EOF
}

Configurando Neovim

Además del resto de complementos que tengo instalados por defecto en Neovim, he añadido uno exclusivo para TypeScript, que es typescript-tools.

Antes que nada indicar, tal y como lo hace el propio desarrollador de la aplicación, que este plugin está en versión beta, con lo que es posible que encuentres algún que otro bug.

En mi caso, lo instalé utilizando Lazy, con la siguiente configuración,

return {
    "pmizio/typescript-tools.nvim",
    dependencies = { "nvim-lua/plenary.nvim", "neovim/nvim-lspconfig" },
    opts = {},
    config = function()
        require("typescript-tools").setup({
            tsserver_locale = "es",
        })
    end,
}

Para documentar utilizo Neogen, que a su vez hace uso de TreeSitter, con lo que es necesario instalar typescript. Para ello, lo que tienes que hacer es ejecutar este comando en Neovim,

TSInstall typescript

A partir de aquí, ya podrás utilizar Neogen para generar la documentación de todo aquello que hagamos. De nuevo, esto lo puedes hacer ejecutando el comando Neogen, o bien, si lo quieres puedes crearte un atajo de teclado que te facilite este. Por ejemplo, en mi caso utilizo ;Dd

El vídeo

A continuación puedes encontrar lo mismo pero en formato vídeo,

Conclusiones

Esta es mi configuración actual, pero se trata de un trabajo en progreso que iré actualizando, conforme vaya actualizando mi flujo de trabajo. Sobre todo, teniendo en cuenta que ahora mismo estoy enfocado a dos entornos completamente distintos.


Más información,

Deja una respuesta

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