装饰器和私有字段 javascript

Ari*_*aga 6 javascript private decorator typescript 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

Ari*_*aga 3

好的,按照 VLAZ 的建议:

JS 中的私有字段是完全私有的,外部无法访问任何内容。因此,它们不能被装饰是有道理的——装饰器无法访问它们。

这是完全正确的,所以当我仔细查看值对象时,我意识到它确实有 publicget属性,因此通过测试可以在这些属性上使用装饰器。

留下类似的东西:

import { IsString } from 'class-validator';

Class Person {
  #name: string;

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

  @IsString()
  get name(): string {
    return this.#name;
  }
}
Run Code Online (Sandbox Code Playgroud)