Mic*_*ens 21 javascript node.js express typescript
我正在为我的应用程序使用打字稿node.js。我想说的res.body是类型personne。我试过这个:
router.post('/',(req: Request, res: Response) => {
const defunt:PersoneModel = res.(<PersoneModel>body);
}
Run Code Online (Sandbox Code Playgroud)
我有这个模型:
export type PersoneModel = mongoose.Document & {
nom: String,
prenom: String,
}
Run Code Online (Sandbox Code Playgroud)
你能帮助我吗?
谢谢你。
ono*_*oya 61
更新:
截至@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> { }
Run Code Online (Sandbox Code Playgroud)
您可以将类型设置req.body为PersoneModel这样:
import { Request, Response } from 'express';
router.post('/',(req: Request<{}, {}, PersoneModel>, res: Response) => {
// req.body is now PersoneModel
}
Run Code Online (Sandbox Code Playgroud)
对于@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
}
Run Code Online (Sandbox Code Playgroud)
gok*_*and 11
我们可以使用as. 这应该是足够的暗示res.body是PersoneModel
const defunt = res.body as PersoneModel;
Run Code Online (Sandbox Code Playgroud)
然而,更直接的方法是将变量的类型声明为 PersoneModel
const defunt: PersoneModel = res.body;
Run Code Online (Sandbox Code Playgroud)