Como crear un modulo de Nodejs con Typscript

Cuando tu aplicaci贸n comienza a crecer o tenemos varias aplicaciones funcionando en paralelo te puedes ver en la necesidad de compartir l贸gica o ciertas funciones entre ellas, en el caso de Nodejs cuando creas un paquete sin Typescript y lo quieres usar en un proyecto con este, deber铆as instalar los types de forma independiente o agregarle un m铆tico // @ts-ignore y nadie quiere eso gui帽o gui帽o.

La idea de este art铆culo es poder dejar las bases para poder crear un paquete con Typescript que genere los types que necesita el mismo de forma autom谩tica. De esta forma lo puedes usar en tus proyectos con Typescript o Javascript plano.

El resultado de esta gu铆a la puedes encontrar en este repositorio.

Armando las bases

mkdir ts-package cd ts-packages npm init -y

Ahora ya tienes el package.json, debes agregar las siguientes dependencias:

npm install @types/node --save-dev npm install typescript ts-node --save-dev

@types/nodes agrega los types a node para poder trabajar con Typescript, agregamos typescript y ts-node para poder transpilar el c贸digo TS a JS, en este ejemplo ser谩 con el m贸dulo commonjs.

Creas el archivo tsconfig.json en la ra铆z del proyecto y le agregas los siguiente:

{ "compilerOptions": { "lib": [ "es5", "es6", "es7", "es2015", "es2016", "es2017", "es2018", "esnext" ], "target": "es2017", "module": "commonjs", "moduleResolution": "Node", "outDir": "./dist", "rootDir": "./lib", "declaration": true, "declarationMap": true, "inlineSourceMap": true, "inlineSources": true } }

Este archivo especifica con qu茅 caracter铆sticas esperamos que se transpile el c贸digo TS a JS:

  • target para transpilar a ES2017, porque ya soporta async/await.
  • module describe el tipo de m贸dulo en este caso ser谩 CommonJS.
  • moduleResolution para indicarle que busque los paquetes en el node_modules.
  • outDir el directorio donde quedar谩 el c贸digo transpilado.
  • rootDir el directorio donde est谩 el c贸digo en Typescript.
  • declaration y declarationMap para generar los types y el map de declaraci贸n.
  • inlineSourceMap y inlineSources genera el mapa de los archivos fuente.

Scripts en package.json

En el package.json debes tener las siguientes propiedades:

{ ... "main": "dist/index.js", "type": "commonjs", "types": "./dist/index.d.ts", "scripts": { "build": "tsc", "watch": "tsc --watch", "test": "cd test && npm run test" }, ... }

Crear los directorio lib y dist en el directorio ra铆z:

mkdir lib mkdir dist

隆Y listo!

Ahora solo te falta escribir dentro del directorio lib tu c贸digo fuente, un archivo index.ts en donde ocurra toda la magia que quieres hacer.

Al ejecutar npm run build podr谩s ver tanspilado el c贸digo de TS a JS en el directorio dist.

Si quieres tener m谩s integraciones puedes mirar en el repositorio que usamos de template en eclass.com, te lo dejo aqu铆 si quieres echarle un ojo o usarlo como template.

Actualizado 23/11/2019 a las 16:16