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.
