Installation en cours
Avant de commencer, assurez-vous que vous avez Node.js 18 ou supérieur installé. Ensuite, créez un répertoire pour votre application et naviguez dedans.
mkdir myappcd myappUtilisez la commande npm init pour créer un fichier package.json pour votre application.
Pour plus d’informations sur le fonctionnement de package.json, voir Specifics of npm’s package.json handling.
npm inityarn initpnpm initbun initCette commande vous invite à trouver un certain nombre de choses, telles que le nom et la version de votre application. Pour l’instant, vous pouvez simplement appuyer sur RETURN pour accepter les valeurs par défaut pour la plupart d’entre eux, à l’exception de la règle suivante :
entry point: (index.js)Entrez app.js, ou quel que soit le nom du fichier principal. Si vous voulez qu’il soit index.js, appuyez sur RETURN pour accepter le nom de fichier par défaut suggéré.
Maintenant, installez Express dans le répertoire myapp et sauvegardez-le dans la liste des dépendances. Par exemple :
npm install expressyarn add expresspnpm add expressbun add expressPour installer Express temporairement et ne pas l’ajouter à la liste des dépendances :
npm install express --no-savebun add express --no-saveTypeScript
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:
npm install --save-dev typescript @types/express @types/nodeyarn add --dev typescript @types/express @types/nodepnpm add --save-dev typescript @types/express @types/nodebun add --dev typescript @types/express @types/nodeSome 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:
{ "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:
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:
node src/app.tsRunning .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.