乐闻世界logo
搜索文章和话题

如何使用类验证器和类转换器使用plainToInstance或plainToClass验证字面值数组

4 个月前提问
4 个月前修改
浏览次数52

1个答案

1

在TypeScript中,我们经常使用class-transformer库来将普通的JavaScript对象(字面量)转换为类的实例,并使用class-validator库来验证这些对象的属性是否符合预期的规则。要实现您的需求,即验证字面值数组,我们可以通过以下步骤进行:

1. 安装必要的库

首先,确保已经安装了class-transformerclass-validator

bash
npm install class-transformer class-validator

2. 创建类和验证规则

定义一个类,并在类的属性上使用class-validator提供的装饰器来指定验证规则。

typescript
import { IsInt, Min, Max, ValidateNested } from 'class-validator'; import { Type } from 'class-transformer'; class Product { @IsInt() @Min(1) @Max(100) id: number; @IsInt() @Min(0) price: number; }

3. 使用plainToInstanceplainToClass转换和验证

使用plainToInstanceplainToClass将字面值数组转换为类的实例数组,然后使用validatevalidateSync方法进行验证。

typescript
import { plainToInstance } from 'class-transformer'; import { validateSync, ValidationError } from 'class-validator'; // 示例字面值数组 const productsArray = [ { id: 10, price: 20 }, { id: 2, price: 5 }, { id: 110, price: -1 } // 这个对象将不会通过验证 ]; // 转换并验证 const products = plainToInstance(Product, productsArray); const errors = products.map(product => validateSync(product)); // 输出错误信息 errors.forEach((error, index) => { if (error.length > 0) { console.log(`Error in product ${index+1}:`, error.map(e => ({ property: e.property, constraints: e.constraints }))); } });

4. 处理验证错误

验证后,您可以根据返回的ValidationError数组来决定如何处理这些错误。例如,您可以记录错误、抛出异常或者返回一个错误响应。

实际应用示例

假设我们有一个在线商店的后端系统,需要接收一个产品列表的JSON数据,并且这些数据需要在存储到数据库之前进行验证。我们可以创建一个RESTful API,该API接收产品数据,使用上述方法来验证数据的合法性,有效的数据才会被进一步处理或存储。

通过这种方式,我们可以确保数据的正确性和一致性,减少因数据错误导致的问题。

总结起来,利用class-transformerclass-validator可以有效地结合使用,实现复杂的数据验证需求,保证数据的安全和一致性。

2024年7月24日 10:01 回复

你的答案