Como utilizar TypeScript en Node JS – Parte 1
En esta página:
TypeScript es muy usado en herramientas y frameworks como Angular, React JS, Vue JS, Node JS, etc. y lo genial de este superconjunto de JavaScript es que te permite trabajar de manera estructurada con una sintaxis limpia y clara, también trabajar con tipado estático, hacer uso de interfaces, crear módulos y exportarlos, entre otras características y no hay una mejor manera de conocer TypeScript que poniéndolo en práctica y en este tutorial te enseñaré como utilizarlo en Node JS, vamos con ello.
Partes
Antes de continuar con este Post, te invito a leer los siguientes artículos:
- Que es TypeScript y otros Detalles
- Que es y Como instalar Node JS
- Como usar Path Aliases (Alias de Ruta) con TypeScript en Node JS 13.7
- Diferencia entre Interface y Type en TypeScript
- Union Type y Literal Type en TypeScript
- Creando nuestra primera aplicación “Hola Mundo” con TypeScript 3.9
- Puedes leer más en la categoría TypeScript.
Asimismo te invito a escuchar el Podcast: “Dominio del trabajo con Varios Lenguajes de Programación”:
Spotify | SoundCloud |
Bien ahora continuemos con el Post: Como utilizar TypeScript en Node JS – Parte 1.
Lo primero que haré es crear un nuevo proyecto con Node JS, para esto ejecuto el siguiente comando.
1 2 3 4 |
# Crear nuevo proyecto en Node JS npm init |
Luego de ejecutar el comando anterior, Node JS nos pedirá llenar algunos datos que irán en el archivo package.json del proyecto, yo le he puesto los siguientes datos.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "name": "typescript_nodejs", "version": "1.0.0", "description": "Como utilizar TypeScript en Node JS", "main": "app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Nube Colectiva", "license": "ISC" } |
Bien ya que tenemos creado un proyecto en Node JS, ahora vamos a integrar TypeScript a continuación.
Integrando TypeScript en Node JS
TypeScript pertenece a la empresa Microsoft y el equipo de desarrolladores que le da soporte ofrece ciertas herramientas y formas de utilizar TypeScript en un determinado entorno, en este caso para Node JS nos provee del paquete NPM typescript que se encuentra hasta la fecha en su versión 3.9.7 y para instalarlo ejecutamos el siguiente comando.
1 2 3 4 5 6 7 |
npm i -save typescript + typescript@3.9.7 added 1 package from 1 contributor and audited 1 package in 9.152s found 0 vulnerabilities |
Ahora vamos a instalar el paquete NPM tslint que sirve para analizar el código TypeScript, para instalar tslint (TSLint) ejecutamos el siguiente comando.
1 2 3 4 5 6 7 |
npm i --save tslint + tslint@6.1.3 added 36 packages from 21 contributors and audited 87 packages in 5.837s found 0 vulnerabilities |
Paso seguido instalaré el Framework Express JS que nos permite crear aplicaciones con Node JS, ejecuto el siguiente comando para instalarlo.
1 2 3 4 5 6 7 |
npm i --save express + express@4.17.1 added 50 packages from 37 contributors and audited 51 packages in 4.885s found 0 vulnerabilities |
También instalare el paquete NPM types/express que instala los tipos Express que le dan compatibilidad con TypeScript. Los tipos en TypeScript son archivos con una extensión .d.ts. Estos se utilizan para proporcionar información de tipo sobre una API, en este caso el Framework Express.
El paquete type/express es necesario, porque TypeScript y Express son paquetes dependientes, sin el paquete types/express, TypeScript no tiene una forma de conocer los tipos de clases del Framework Express, para instalar el paquete type/express ejecutamos el siguiente comando.
1 2 3 4 5 6 7 |
npm i --save @types/express + @types/express@4.17.7 added 9 packages from 77 contributors and audited 96 packages in 3.779s found 0 vulnerabilities |
Ahora pasaremos a configurar TypeScript.
Configuración de TypeScript
Ahora vamos a configurar TypeScript y un Linting, vamos a crear un archivo llamado tsconfig.json, en este archivo se realiza la configuración de las opciones del compilador para un proyecto.
En el directorio principal de mi proyecto voy a crear un archivo con el nombre tsconfig.json
1 2 3 4 5 6 7 |
/como_usar_typescript_en_nodejs ├── /node_modules ├── package.json ├── package-lock.json ├── tsconfig.json // Creo este Archivo |
Abro el archivo tsconfig.json y agrego la siguiente estructura JSON.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "compilerOptions": { "module": "commonjs", "esModuleInterop": true, "target": "es6", "moduleResolution": "node", "sourceMap": true, "outDir": "dist" }, "lib": ["es2015"] } |
Veamos a continuación para que sirve cada opción del archivo tsconfig.json
module
Acá especificamos el método de generación de código del módulo, hacemos usos de nodo commonjs
esModuleInterop
Con esta opción podemos importar módulos CommonJS de acuerdo con las especificaciones de módulos de ECMAScript 6 (es6).
target
Especificamos la versión de JavaScript.
moduleResolution
Este es el proceso que usa el compilador para averiguar a qué se refiere una importación, puedes leer más en el siguiente enlace oficial de TypeScript.
sourceMap
En esta opción activamos o desactivamos la creación de un archivo .map, este archivo permite depurar nuestro proyecto en producción.
outDir
Este es el nombre del directorio o carpeta en donde se colocarán los archivos .js que se generan luego de transpilar nuestra aplicación, por ejemplo el nombre del directorio o carpeta se llamara dist.
Si necesitas conocer otras opciones disponibles, puedes crear el archivo tsconfig.json mediante el siguiente comando.
1 2 3 4 5 |
tsc --init message TS6071: Successfully created a tsconfig.json file. |
Luego de ejecutar el comando anterior, se ha generado un archivo tsconfig.json con muchas opciones, las cuales puedes revisar con calma, se podría decir que también es otra forma de crear el archivo tsconfig.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
{ "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Basic Options */ // "incremental": true, /* Enable incremental compilation */ "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ // "lib": [], /* Specify library files to be included in the compilation. */ // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ // "declaration": true, /* Generates corresponding '.d.ts' file. */ // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ // "sourceMap": true, /* Generates corresponding '.map' file. */ // "outFile": "./", /* Concatenate and emit output to single file. */ // "outDir": "./", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ // "composite": true, /* Enable project compilation */ // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */ // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ /* Strict Type-Checking Options */ "strict": true, /* Enable all strict type-checking options. */ // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ // "strictNullChecks": true, /* Enable strict null checks. */ // "strictFunctionTypes": true, /* Enable strict checking of function types. */ // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ /* Additional Checks */ // "noUnusedLocals": true, /* Report errors on unused locals. */ // "noUnusedParameters": true, /* Report errors on unused parameters. */ // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ /* Module Resolution Options */ // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ // "types": [], /* Type declaration files to be included in compilation. */ // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ /* Source Map Options */ // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ /* Experimental Options */ // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ /* Advanced Options */ "skipLibCheck": true, /* Skip type checking of declaration files. */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ } } |
Bien hasta aquí esta primera parte en donde hemos creado un nuevo proyecto en Node JS, hemos iniciado la configuración e integración de TypeScript en Node JS.
Ten Paciencia, lo que quiero es que entiendas todo el proceso para Crear este Proyecto y no llenarte el capitulo de mucho contenido porque te puedes marear y no tendrás un óptimo aprendizaje.
Nota (s)
- En el siguiente capitulo continuaremos con la integración y configuración de TypeScript en Node JS.
- Los pasos y el código compartido en este capitulo del tutorial pueden cambiar, quedar obsoleto o continuar, esto no depende de nosotros, si no de la empresa que dan soporte a Node JS y TypeScript, que suelen cambiar sus códigos y pasos de configuración en futuras versiones.
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.
- TypeScript
- 11-08-2020
- 18-08-2020
- Crear un Post - Eventos Devs - Foro
Social
Redes Sociales (Developers)
Redes Sociales (Digital)