Я видел код и не думаю, что это возможно (поправьте меня, если я ошибаюсь). Самое близкое, что вы можете сделать, это: https://github.com/hapijs/joi/blob/master/test/extend.js#L95
const custom = Joi.extend({
type: /^s/, // <<< regex for type
rules: {
hello: {
validate(value, helpers, args, options) {
return 'hello';
},
},
},
});
const string = custom.string().hello();
expect(string.type).to.equal('string');
expect(string.hello().validate('goodbye').value).to.equal('hello');
const symbol = custom.symbol().hello();
expect(symbol.type).to.equal('symbol');
expect(symbol.hello().validate(Symbol('x')).value).to.equal('hello');
Потому что в https://github.com/hapijs/joi/blob/master/lib/index.js#263:
for (const type of joi._types) {
if (extension.type.test(type)) {
const item = Object.assign({}, extension);
item.type = type;
item.base = joi[type]();
extended.push(item);
}
}
Джой проверка всех типов с помощью регулярного выражения type
.
Может быть, вы можете создать customType с регулярным выражением, которое соответствует типам, которым вы хотите соответствовать (или всем типам). Тогда вместо, например, Joi.string()
вы можете использовать custom.string()
.