最近在学`typescript`, 试着把<https://github.com/node-modules/parameter> 重构了,欢迎使用😁
https://github.com/ckpack/parameter 例子:
import { Parameter } from '@ckpack/parameter';
const parameter = new Parameter();
const rule = {
isAdmin: 'boolean',
age: {
type: 'int',
min: 0,
max: 200,
},
ids: {
type: 'array',
itemType: 'int',
itemRule: {
min: 1
}
}
}
const data = {
isAdmin: true,
age: 18,
ids: [1, 2, 3]
};
const errors = parameter.validate(rule, data);
支持的验证类型
int
如果类型为int
,则有以下选项规则
max
- 值的最大值,值必须 <=max
min
- 值的最小值,值必须 >=min
{
score: 'int',
}
// or
{
score: {
type: 'int',
min: 0,
max: 200,
}
}
number
如果类型为number
,则有以下选项规则
max
- 值的最大值,值必须 <=max
min
- 值的最小值,值必须 >=min
{
score: 'number',
}
// or
{
score: {
type: 'number',
min: 0,
max: 100,
}
}
string
如果类型为string
,则有以下选项规则
regex
- 检查字符串格式的正则表达式max
- 字符串的最大长度min
- 字符串的最小长度
{
username: 'string',
}
// or
{
username: {
type: 'string',
regexp: /\S{4,20}/
}
}
boolean
检查是否是boolean
类型
{
isAll: 'boolean',
}
// or
{
isAll: {
type: 'boolean',
}
}
array
如果类型是数组,则有以下选项规则
itemType
- 此数组中每个项目的类型itemRule
- 此规则中每个项目的规则itemChecker
- 每个项目的检查器,在这种情况下,您可以省略itemType
和itemRule
max
- 数组的最大长度min
- 数组的最小长度
{
ids: {
itemType: 'int',
itemRule: {
min: 1,
max: 1000,
},
min: 0,
max: 100,
}
}
enum
如果类型是enum
,则有以下规则
enum
- 数组,其中的值必须为其中一个
{
sex: ['man', 'woman']
}
// or
{
sex: {
type: 'enum'
enum: ['man', 'woman']
}
}
object
如果类型是对象,则有以下规则
rule
- 验证对象属性的对象
{
people: {
type: 'object',
rule: {
name: 'string',
age: {
isRequired: false,
type: 'int',
min: 1,
max: 200
}
}
}
}
custom
你也可以定义自定义验证类型
import { Parameter } from '@ckpack/parameter';
const parameter = new Parameter();
// 验证是否为偶数
parameter.addRule('even', (rule, value) => {
return value % 2 === 0 ? null : `${value} is not even`;
});
// rule
{
someNumber: 'even'
}
// or
{
someNumber: {
type: "even",
}
}
对于自定义验证类型你也可以添加参数如:
import { Parameter } from '@ckpack/parameter';
const parameter = new Parameter();
// 验证能否被某个数字整除
parameter.addRule('times', (rule, value) => {
const { times } = rule;
return value % times === 0 ? null : `not an integer multiple of ${times}`;
});
// rule
{
someNumber: {
type: "times",
times: 3,
}
}
2 回复
写 Node.js 库我都鲜少用 ts 了,不太好排查, 像 next 这样的话比较难搞
@xiaoxiaojx 我也不喜欢typescript
, 感觉像是脱裤子放屁,影响效率,注意力全放在怎么解决报错信息上面了