Pull to refresh

Comments 3

Не очень понятен смысл вот этого:
@rw value?: string = '';


Модификатора доступа нет, без @rw оно не будет доступным для чтения и для записи?

Read only поле в ES6 и typescript вообще можно сделать убрав сеттер и оставив только геттер.

Да и зачем вам дескрипторы, если есть поддержка get и set?
Модификатора доступа нет, без @rw оно не будет доступным для чтения и для записи?

Согласен, не очень понятно получилось. Суть его использования в том, что в коде декоратора @rw имеется такой кусочек кода:

Object.defineProperty(target, propertyKey.toString(), {
    value: undefined,
    configurable: true,
    enumerable: true,
    writable: true
});


С его помощью, мы принудительно объявляем свойства (на которых применён декоратор @rw) со значением undefined когда создаём экземпляр класса параметров.
Это всё нужно из-за того, что TypeScript вырезает свойства без заданных значений и мы теряем автодополнение в каком-нибудь Chrome DevTools.

image

Во-вторых, можно использовать такой декоратор «чтение и запись» для явного переопределения свойств с декоратором «только для чтения» в подклассах.

Read only поле в ES6 и typescript вообще можно сделать убрав сеттер и оставив только геттер. Да и зачем вам дескрипторы, если есть поддержка get и set?

Можно, но мы решили, что конечным разработчикам будет проще и короче использовать декораторы для всех таких штук, оставив класс с параметрами максимально простым.
Плюс декораторами можно удобнее решать и другие проблемы, пряча в них шаблонный повторяющийся код (например, при использования декоратора apiEvent, предыдущая установленная функция-обработчик сама отписывается, но разработчику достаточно использовать этот декоратор и не думать о тонкостях реализации механизма событий).
Но зачем вы делаете Object.defineProperty в декораторе?! И зачем вызывать toString у propertyKey?!
Sign up to leave a comment.