typescript - Eksplisitt spesifisering av typer for Express' «application, request, response...»


Jeg jobber med å oppdatere en enkel NodeJS + ExpressJS-app til å bruke TypeScript. Jeg har fått det til å fungere, men jeg sliter med å legge til noen ekstra datamerkninger for å få ekstra typekontroll og kodeautofullføring/IntelliSense i Visual Studio og WebStorm.

Jeg har referert til den nyeste express.d.ts. Jeg har også opprettet Express-appen:

var app = express();

Alt fungerer... men jeg ser ut til å ikke få til å legge til typeinformasjonen for app for autoutfyllingshjelp når du skriver noe som

app.get('/',function(req,res){});

Jeg har prøvd å annotere app (og req & res) ved å bruke Express.Application (og .Request & .Response), men det løser seg ikke. Når jeg ser på typedefinisjonen, blir jeg forvirret av hvordan typedef-en er skrevet, noe som skaper den interne «e»-referansen...

Overrasket over at jeg ikke kan finne noen som spør og løser dette siden express.d.ts-typedefinisjonen ble oppdatert for ExpressJS 4.0 (tidligere fant jeg referanser til ExpressServer, men det er ikke til stede i dag).

Ideer?

Svar #1

Klassisk tilfelle av "jobbe med noe en stund uten å lykkes, men når du endelig legger ut et spørsmål og ber om hjelp, finner du ut av det med en gang".

Løsningen: Når du vil bruke en av typene, må du importere modulen siden typedefen er i en navngitt modul innen typedefen.

I koden ovenfor (som lå i min app.ts), fikk jeg typeannotasjonene på app. Fordi importsetningen min øverst i filen var import express=require('express');, kunne jeg annotere req og res parametrene på denne måten:

app.get('/', function(req:express.Request, res:express.Response){});

I andre filer, hvor jeg prøvde å få typeannotasjoner på app, manglet jeg import-setningen øverst i filen. Når den ble lagt til, kunne jeg legge til annotasjonene for det også som:

public init(app: express.Application){}

Svar #2

Jeg tror noen av disse svarene kan være utdaterte. Følgende fungerte for meg:

import { Request, Response } from 'express';

Svar #3

I tilfelle noen kommer over dette spørsmålet i 2017 og bruker en mer moderne TS. Du skal kunne bare npm install @types/express og da skal det bare fungere.

Relaterte artikler