簡體   English   中英

res.body 的 TypeScript 類型注釋

[英]TypeScript type annotation for res.body

我正在為我的應用node.js express 使用 typescript。 我想說res.body是類型 personne。 我試過這個:

router.post('/',(req: Request, res: Response) => {
   const defunt:PersoneModel = res.(<PersoneModel>body);
}

我有這個 model:

export type PersoneModel = mongoose.Document & {
  nom: String,
  prenom: String,
}

你能幫助我嗎?

謝謝你。

更新:

@types/express@4.17.2Request類型使用泛型。

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/express/index.d.ts#L107

interface Request<P extends core.Params = core.ParamsDictionary, ResBody = any, ReqBody = any, ReqQuery = core.Query> extends core.Request<P, ResBody, ReqBody, ReqQuery> { }

你可以的類型設置req.bodyPersoneModel是這樣的:

import { Request, Response } from 'express';

router.post('/',(req: Request<{}, {}, PersoneModel>, res: Response) => {
   // req.body is now PersoneModel
}

對於@types/express@4.17.1及以下

遇到類似的問題,我使用泛型解決了它:

import { Request, Response } from 'express';

interface PersoneModel extends mongoose.Document {
  nom: String,
  prenom: String,
}

interface CustomRequest<T> extends Request {
  body: T
}

router.post('/',(req: CustomRequest<PersoneModel>, res: Response) => {
   // req.body is now PersoneModel
}

我們可以使用as . 這應該足以暗示res.bodyPersoneModel

 const defunt = res.body as PersoneModel;

然而,更直接的方法是將變量的類型聲明為PersoneModel

 const defunt: PersoneModel = res.body;
router.post('/',(req: Omit<Request,'body'> & { body: PersoneModel }, res: Response) => {
   // code
}

這也可以,如果你想創建抽象很有用

這對我有用(我正在使用節點、快遞和 postgres 池連接):

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

export interface ITeamsRequest {
  teams?: ITeam[];
  divisions?: ITournamentDivision[];
}

export function setupTeams(app: express.Application, client: Pool) {
  app.get(
    '/teams',
    async (req: Request, res: Response<ITeamsRequest>) => {
        const teams = // get teams;
        const divisions = // get divisions;
        res.status(200);
        return res.json({ teams, divisions });
    },
  );
}

關鍵是手動導入請求和響應,並使用泛型類型( Response<ITeamsRequest> )您可以定義自己的 ResBody 類型。

這是在 express 版本 4.17.1 和 @types/express 4.17.11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM