[英]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.2
, Request
類型使用泛型。
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.body
到PersoneModel
是這樣的:
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.body
是PersoneModel
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.