如何获得与打字稿中express的Post方法相同的数据类型

时间:2019-05-14 04:43:54

标签: node.js typescript express

我想将请求和响应传递给控制器​​,但是我没有获得正确的数据类型。

我的路由器在下面

import express from 'express'
import { ProjectController } from '../controllers/projectController';

const router = express.Router()
const projectController = new ProjectController()

router.post('/', function(request, response) {
    projectController.save(request, response)
})

export default router

以上请求的数据为export interface Request extends http.IncomingMessage, Express.Request,取自/node_modules/@types/express-serve-static-core/index.d.ts

上面的响应数据为export interface Response extends http.ServerResponse, Express.Response,取自/node_modules/@types/express-serve-static-core/index.d.ts

我的控制器在下面

export class ProjectController {
    public save(request: Request, response: Response) {
        response.status(200).send
    }
}

以上请求的数据类型为interface Request extends core.Request { },它来自/node_modules/@types/express/index.d.ts 上面响应的数据类型为interface Response extends Body

问题是当我将请求和响应从post方法传递到控制器的save方法时,数据类型不同,并且不显示状态和send方法。 因此,如何声明与post方法具有相同数据类型的函数。

1 个答案:

答案 0 :(得分:1)

我使用此thread解决了这个问题。

router.ts

import express from 'express'
import { ProjectController } from '../controllers/projectController';

const router = express.Router()
const projectController = new ProjectController()

router.post('/', function(req, res) {
    projectController.save(req, res)
})

export default router

controller.ts

import { Router, Request, Response } from 'express'

export class ProjectController {
    public save(req: Request, res: Response) {
        res.status(200).send({message: 'Reached here'})
    }
}