如何在Express应用程序中使用DefinitelyTyped定义

时间:2014-02-15 12:37:09

标签: node.js express typescript

如何将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'

我的项目结构是这样的:

  • .TS-定义
    • express.d.ts
    • node.d.ts
  • 路由
    • games.ts
  • app.ts

我的 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')

的文件

2 个答案:

答案 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代替手动添加打字标题,可以节省大量时间。)