Декораторы и приватные поля javascript

#javascript #typescript #decorator #private #class-validator

Вопрос:

Я обнаружил, что пытаюсь использовать декораторы с собственными частными свойствами javascript ( # ), и эти первые «распознающие», которые используются, не работают.

Я определил это с помощью декораторов-валидаторов классов в частных свойствах моих объектов значений.

Ошибка, которую я получаю в редакторе кода: Декораторы здесь недопустимы

Пример:

 import { IsString } from 'class-validator';

Class Person {
  @IsString()
  #name: string;

  constructor(name: string) {
    this.#name = name;
  }

  get name(): string {
    return this.#name;
  }
}
 

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

1. Частные поля в JS являются полностью частными и недоступными для всего, что находится снаружи. Поэтому имеет смысл, что они не могут быть украшены — у декоратора нет возможности получить к ним доступ.

Ответ №1:

Хорошо, как предложил ВЛАЗ:

Частные поля в JS являются полностью частными и недоступными для чего-либо извне. Поэтому имеет смысл, что они не могут быть украшены — у декоратора нет возможности получить к ним доступ.

Это совершенно правильно, поэтому, когда я более внимательно посмотрел на объект value, я понял, что у него есть общедоступные get свойства, поэтому, протестировав, можно использовать декораторы для этих свойств.

Оставив что-то вроде:

 import { IsString } from 'class-validator';

Class Person {
  #name: string;

  constructor(name: string) {
    this.#name = name;
  }

  @IsString()
  get name(): string {
    return this.#name;
  }
}