如何将Express定义中的类型添加到函数中?
我有一个函数,它接受一个Express Request和一个Express Response作为参数,但我无法正确设置类型。
我的标准JS函数如下所示:
/// <reference path="../node.d.ts" />
/// <reference path="../express.d.ts" />
function postNewGame(req, res) {
}
但我想用Express Definition中的类型来增强它。哪个应该是这样的:
/// <reference path="../node.d.ts" />
/// <reference path="../express.d.ts" />
function postNewGame(req: Request, res: Response) {
}
但是,使类型工作的正确命名空间或语法是什么?
以上示例提供了此错误Could not find symbol 'Request'
任何建议/帮助都将不胜感激。
更新1 :
我应该注意,我正在尝试这样做的文件,不是我导入快速模块的app.js。我的函数位于my-routes
模块中,require
我的app.js,这可能是我的问题。
更新2 :
我制作了一个更简单的示例应用来测试这个,我仍然在我的 games.ts 文件中获得Could not find symbol 'Request'
。
我的项目结构是这样的:
我的 app.ts 看起来像这样(超级简化):
/// <reference path=".ts-definitions/express.d.ts" />
var express = require('express')
var app = express();
require('./routes/games')(app);
http.createServer(app).listen(app.get('port'), function () {
console.log("Express server listening on port " + app.get('port'));
});
和我的 games.ts 是这样的:
/// <reference path="../.ts-definitions/express.d.ts" />
// How do i access express.Request, when express is not defined in the file?
module.exports = function (app) {
app.get('/games', function (req: express.Request, res: express.Response) { // express is not defined
res.render('games');
});
}
对我而言,似乎定义仅适用于我有import express = require('express')
答案 0 :(得分:3)
即使只使用接口/类型的文件,也可以使用import express = require('express');
。编译文件时,如果你实际上没有使用express,那么TypeScript编译器足够聪明,可以将它从编译代码中删除。
/// <reference path="../.ts-definitions/express.d.ts" />
import express = require('express');
module.exports = function (app) {
app.get('/games', function (req: express.Request, res: express.Response) {
res.render('games');
});
}
答案 1 :(得分:-1)
查看我用我编写的纯TypeScript编写的示例Express应用程序,您应该能够了解如何管理文件的要点:https://github.com/czechboy0/Express-4x-Typescript-Sample
(另外,使用tsd代替手动添加打字标题,可以节省大量时间。)