Можно ли использовать TypeScripts decorator для проверки значения параметров метода?

#typescript #typescript-decorator

#машинописный текст #typescript-декоратор #typescript #typescript-decorator

Вопрос:

Я стараюсь следовать этому руководству по оформлению параметров машинописного текста, но изо всех сил пытаюсь получить его, возможно ли создать декоратор для проверки параметра метода следующим образом:

 class World{
   constructor(){
   }

   sayHelloTo(@checkIfNameBeginsWithCapital name: string){
      console.log("Hello World!");
   }
}
  

Если я правильно понял, это может быть достигнуто путем создания двух декораторов, как показано ниже:

 class World{
   constructor(){
   }

   @validate
   sayHelloTo(@nameBeginWithCapital name: string){
      console.log("Hello World!");
   }
}
  

@nameBeginWithCapital определит метаданные для параметра и @validate будет искать параметр с такими метаданными и выполнять фактическую проверку, я прав?

Вопрос, правильно ли я понимаю, и если нет, то можно @checkIfNameBeginsWithCapital создать для выполнения этой задачи без дополнительных декораторов в рамках текущих ограничений TS?

Ответ №1:

@nameBeginWithCapital определит метаданные для параметра, а @validate будет искать параметр с такими метаданными и выполнять фактическую проверку, я прав?

Точно. Декораторы параметров можно использовать только для добавления метаданных. «Тяжелая работа» должна выполняться с помощью декоратора метода, точно так, как вы описали. Хороший пример и объяснение можно найти в TypeScript Handbook (как вы уже нашли и который является официальным источником), который демонстрирует то, чего вы пытаетесь достичь, но вместо этого с required проверкой.

Я изменил пример из руководства в соответствии с вашим случаем и заставил его работать на StackBlitz.

Комментарии:

1. Большое вам спасибо!