javascript - Cum să efectuezi validări Joi pentru o clasă TypeScript?
Sunt capabil să efectuez validări Joi pentru expresii de funcție în Node așa cum se arată mai jos
export var shippingInfo = Joi.object().keys({
expectedDeliveryDate:Joi.date().required(),
isRegisteredCompanyAddress:Joi.number().required(),
addressLine:Joi.string(),
country:Joi.string(),
state:Joi.string(),
city:Joi.string(),
zipcode:Joi.string()
});
Dar problema este că recent am început să lucrez cu TypeScript. Deci aici, am câteva clase și trebuie să efectuez validările Joi așa cum am făcut în expresiile de funcții de mai sus. Adică vreau să validez pentru clasa de mai jos
export class ShippingInfo {
expectedDeliveryDate: Date,
isRegisteredCompanyAddress: number,
addressLine:string,
country:string,
state:string,
city:string,
zipcode:string
}
Cum ar trebui să fac validările pentru clasa de mai sus? Ar trebui să fac validări la nivel de clasă sau la nivel de obiect? Cum?
Răspuns #1
poți folosi acest proiect ca referință. tsdv-joi
// ...imports...
registerJoi(Joi);
class MyClass {
@Max(5)
@Min(2)
@StringSchema
public myProperty : string;
}
let instance = new MyClass();
instance.myProperty = "a";
const validator = new Validator();
var result = validator.validate(instance);
console.log(result); // outputs the Joi returned value
Dacă ai nevoie de pachetul npm, atunci poți folosi acest wrapper pentru el gearworks
Răspunsul #2
Poți folosi class-from-any, tsdv-joi, class-validator sau class-transformer.
Exemplu din class-from-any unde obținem, convertim și validăm date JSON ca o clasă TypeScript:
import { FromAny, GetFrom, Validate, isString, notEmpty } from "class-from-any";
const worldJSONData = `{"name": "Earth"}`;
class World extends FromAny {
@GetFrom("name") @Validate(isString, notEmpty) title: string;
}
const world = new World().from(
JSON.parse(worldJSONData) as Record<string, unknown>
);
