Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
297 views
in Technique[技术] by (71.8m points)

typescript - Explicitly Specifying types for Express' "application, request, response..."

I'm working to update a simple NodeJS + ExpressJS app to use TypeScript. I've got it working, but I'm having fits adding some extra data annotations to add extra type checking and code-time autocomplete/IntelliSense in Visual Studio & WebStorm.

I've got the latest express.d.ts referenced. I've also created the Express app:

var app = express();

Everything works... but I can't seem to figure out how to add the type info for app for autocomplete assistance when you type something like

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

I've tried annotating app (and req & res) using Express.Application (and .Request & .Response) but that isn't resolving. Looking at the type definition I'm getting confused with how the typedef is written creating the internal "e" reference...

Surprised I can't find anyone asking & resolving this since the express.d.ts typedef was updated for ExpressJS 4.0 (previously I found references to ExpressServer but that isn't present today.

Ideas?

question from:https://stackoverflow.com/questions/27676884/explicitly-specifying-types-for-express-application-request-response

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Classic case of "work on something for a while with no success, but when you finally post a question asking for help, you figure it out immediately".

The solution: When you want to use one of the types, you have to import the module as the typedef is in a named module within the typedef.

In the above code (that resided in my app.ts), I was getting the type annotations on app. Because my import statement at the top of the file was import express = require('express');, I could annotate the req & res params like this:

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

In other files, where I was trying to get type annotations on the app, I was missing the import statement at the top of the file. Once added, I could add the annotations for that as well like:

public init(app: express.Application){}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...