Traducir esta página

Instalando

Antes de comenzar, asegúrese de que tiene instalado Node.js 18 o superior. Luego, crea un directorio para tu aplicación y navega por ella.

Terminal window
mkdir myapp
cd myapp

Usa el comando npm init para crear un archivo package.json para tu aplicación. Para más información sobre el funcionamiento de package.json, consulta Especificaciones del manejo de package.json de npm.

Terminal window
npm init

Este comando te pide varias cosas, como el nombre y la versión de tu aplicación. Por ahora, puede simplemente pulsar RETURN para aceptar los valores predeterminados para la mayoría de ellos, con la siguiente excepción:

entry point: (index.js)

Introduzca app.js, o lo que quiera que sea el nombre del archivo principal. Si desea que sea index.js, pulse RETURN para aceptar el nombre de archivo predeterminado sugerido.

Ahora, instale Express en el directorio myapp y guárdelo en la lista de dependencias. Por ejemplo:

Terminal window
npm install express

Para instalar Express temporalmente y no añadirlo a la lista de dependencias:

Terminal window
npm install express --no-save

TypeScript

Express is written in JavaScript and does not bundle its own type definitions. To use it with TypeScript, install TypeScript together with the community-maintained types for Express and Node.js (from DefinitelyTyped) as development dependencies:

Terminal window
npm install --save-dev typescript @types/express @types/node

Some middleware does not bundle its own type definitions. If you add an official middleware package that TypeScript reports as untyped, also install its types from DefinitelyTyped as a dev dependency, for example @types/cors alongside cors.

Add a tsconfig.json. These options mirror how Node.js runs TypeScript and make the compiler reject non-erasable syntax (such as enums, namespaces, and parameter properties) that Node cannot strip:

tsconfig.json
{
"compilerOptions": {
"target": "esnext",
"module": "nodenext",
"rewriteRelativeImportExtensions": true,
"erasableSyntaxOnly": true,
"verbatimModuleSyntax": true,
"noEmit": true,
"strict": true,
"skipLibCheck": true
}
}

Write your application in TypeScript, annotating the request and response objects:

src/app.ts
import express, { type Express, type Request, type Response } from 'express';
const app: Express = express();
app.get('/', (req: Request, res: Response) => {
res.send('Hello World!');
});
app.listen(3000);

You do not need to annotate everything. When you pass a handler directly to a route method or to app.use(), Express infers the types of req, res, and next, and it infers route parameters from the path, so req.params.id is a string in app.get('/users/:id', ...). Add explicit types only where TypeScript has no context to infer from: error-handling middleware, whose (err, req, res, next) signature is not inferred, and handlers you define separately from the route. In those cases, annotate the parameters or type the whole function as RequestHandler or ErrorRequestHandler.

Run the file directly with Node.js, which strips the TypeScript types and runs the result without a build step:

Terminal window
node src/app.ts

Note

Running .ts files directly requires Node.js >= 22.18.0 (or >= 23.6.0 on the v23 line) and TypeScript >= 5.8. Node strips the types but does not type-check them, so run npx tsc to type-check your project. For more details, see the Node.js guide on running TypeScript natively.