typescript - Propriedade 'path' não existe no tipo 'ValidationError'. com express-validator 7.0.1
Estou tentando acessar o campo path do express-validator 7.0.1. Mas quando faço isso, recebo o erro "Propriedade 'path' não existe no tipo 'ValidationError'".
import express, { Request, Response } from "express";
import { check, validationResult } from "express-validator";
import { save } from "./UserService";
const router = express.Router();
type ValidationResultError = {
[string: string]: [string];
};
router.post(
"/api/1.0/users",
check("username").notEmpty().withMessage("Username cannot be null"),
check("email").notEmpty().withMessage("E-mail cannot be null"),
async (req: Request, res: Response) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
const validationErrors: ValidationResultError = {};
errors
.array()
.forEach((error) => (validationErrors[error.path] = error.msg)); // error is here
return res.status(400).send({ validationErrors: validationErrors });
}
await save(req.body);
return res.send({ message: "User Created" });
}
);
Aqui está como é mostrado no editor:
Quando eu modifico o código-fonte onde estou iterando sobre o array errors e registro o objeto error no console:
...
errors.array().forEach((error) => console.log(error));
...
Consigo ver todos os objetos, que têm o campo path no console:
{
type: 'field',
value: null,
msg: 'Username cannot be null',
path: 'username',
location: 'body'
}
{
type: 'field',
value: null,
msg: 'E-mail cannot be null',
path: 'email',
location: 'body'
}
Mas eu só consigo acessar o msg e o campo type. Todos os outros campos não funcionam:
Eu não sei como consertar isso.
Resposta #1
Da migração-v6-para-v7#Diferenciando tipos de erro
O tipo ValidationError no TypeScript agora é uma união discriminada.
Pode ser necessário usar um switch ou instruções if para verificar se você está lidando com o tipo que deseja formatar/debugar.
Apenas o FieldValidationError possui o campo path.
type FieldValidationError = {
type: 'field';
location: Location;
path: string;
value: any;
msg: any;
};
Além disso, dê uma olhada na documentação do ValidationError
Qualquer um dos erros de validação. É possível determinar qual é o erro realmente olhando para sua propriedade
type
import express from 'express';
import { check, validationResult } from 'express-validator';
const router = express.Router();
type ValidationResultError = {
[string: string]: [string];
};
router.post(
'/api/1.0/users',
check('username').notEmpty().withMessage('Username cannot be null'),
check('email').notEmpty().withMessage('E-mail cannot be null'),
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
const validationErrors: ValidationResultError = {};
errors.array().forEach((error) => {
if (error.type === 'field') {
// error is FieldValidationError
validationErrors[error.path] = error.msg;
}
});
return res.status(400).send({ validationErrors: validationErrors });
}
return res.send({ message: 'User Created' });
},
);

