Búsqueda de sitios web

javascript - Anotación de tipo TypeScript para res.body


Estoy usando TypeScript para mi aplicación node.js express. Me gustaría decir que res.body es del tipo personne. He intentado esto:

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

Tengo este modelo:

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

¿Puedes ayudarme?

Gracias.

Respuesta #1

Actualización:

A partir de @types/[email , el tipo Request utiliza genéricos.

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> { }

Podrías establecer el tipo de req.body a PersoneModel así:

import { Request, Response } from 'express';

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

Para @types/[email  y versiones anteriores

Me encontré con un problema similar y lo resolví usando genéricos:

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
}

Respuesta #2

Podemos usar as. Esto debería ser suficiente para implicar que res.body es PersoneModel

 const defunt = res.body as PersoneModel;

Sin embargo, una forma más directa es declarar el tipo de la variable como un PersoneModel

 const defunt: PersoneModel = res.body;

Artículos relacionados