【问题标题】:How to perform Joi Validations for a TypeScript Class?如何为 TypeScript 类执行 Joi 验证?
【发布时间】:2017-12-07 11:04:01
【问题描述】:

我可以对节点中的函数表达式执行 Joi 验证,如下所示

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()
});

但问题是,我最近开始研究打字稿。所以在这里,我的课程很少,我应该像在上面的函数表达式中那样执行 Joi 验证。即我想验证以下课程

export class ShippingInfo {
   expectedDeliveryDate: Date,
   isRegisteredCompanyAddress: number,
   addressLine:string,
   country:string,
   state:string,
   city:string,
   zipcode:string
}

我应该如何对上述课程进行验证。应该对类级别还是对象级别进行验证?怎么样?

【问题讨论】:

    标签: javascript node.js validation typescript joi


    【解决方案1】:

    您可以将此项目用作参考。 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
    

    如果你需要 npm 包,那么你可以使用这个包装器gearworks

    【讨论】:

    • 谢谢。我应该如何在我的打字稿类中使用 tsdv-joi?它没有 npm 包。我对节点很陌生:)
    • 感谢您抽出宝贵时间回答 Mehul。 gearworks 包装器可以对类属性(如 tsdv-joi)执行验证吗?你能为我提供一个带有齿轮的课程的示例 sn-p 吗?
    • 是否可以在没有其他库帮助的情况下在 typescript 中使用 joi ?
    • @Sathyanarayanan github.com/joiful-ts/joiful 你可以使用 TS 中的标准 joi 库。
    【解决方案2】:

    您可以使用class-from-anytsdv-joiclass-validatorclass-transformer

    来自class-from-any 的示例,我们在其中获取、转换和验证 JSON 数据作为 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>
    );
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 2018-09-24
      • 2018-02-03
      相关资源
      最近更新 更多