Tipos de validación personalizada de Typescript y Express Validator
Cuando utilizo el método personalizado de express validator estoy recibiendo un error
Argument of type '(userDoc: User | null) => Promise<never> | undefined' is not assignable to parameter of type '(value: User | null) => PromiseLike<never>'.
Type 'Promise<never> | undefined' is not assignable to type 'PromiseLike<never>'.
Type 'undefined' is not assignable to type 'PromiseLike<never>'.
import express from 'express';
import { body } from 'express-validator/check'
import User from '../models/User';
import { login, signUp } from '../controllers/auth';
const router = express.Router();
router.post(
'/sign-up',
[
body('username', 'User Name should be atlest 4 characters long')
.isLength({ min: 4 })
.isString()
.trim()
.custom((username: string, { req }) => {
return User.findOne({ username }).then(userDoc => {
if (userDoc) {
return Promise.reject('User Name is already taken');
}
});
})
],
signUp,
);Respuesta #1
La forma en que implementas User.findOne devuelve una Promesa. Por eso usas Promise.reject para lanzar un error. Así que también tienes que devolver un objeto Promesa en caso de que la validación sea exitosa.
if (userDoc) {
return Promise.reject('User Name is already taken');
}
return Promise.resolve()
