Если вы снова и снова используете один и тот же набор декораторов в свойствах, вы можете создать новый декоратор, который просто объединяет их вместе.
const CombinedDecorator = (target, property, descriptor) => {
IsOptional(target, property, descriptor);
IsString(target, property, descriptor);
Column('text')(target, property, descriptor);
}
class Person {
@CombinedDecorator()
name: string;
}
Вы можете придумать несколько таких, которыеОхватите ваши обычные случаи использования или рассмотрите возможность превращения их в Декораторскую фабрику, которая принимает объект конфигурации и при необходимости применяет декораторы на основе параметров.
Я думаю, что даже небольшое повторение с декораторами гораздо предпочтительнее использованиячто-то вроде JOI, так как вам все равно придется явно указывать все правила, но в месте, отличном от ваших реальных моделей, которое допускает множество источников правды.