javascript Jest/Vitest如何在不使用括号的情况下处理“.not.”属性?我如何复制它?

8ulbf1ek  于 2023-01-16  发布在  Java
关注(0)|答案(2)|浏览(95)

现在我需要做validate.not().empty(...),它可以很好地否定“非空”验证。但是在查看Vitest和expect.not.toBe(...)的Assert(不使用括号)之后,我想知道这将如何编码。我尝试了代理、getter和addProperty,但还没有找到复制这种设置的解决方案。
现在我只有这个

not() {
    this.is_not = true;
    return this;
}

有没有简单的方法来实现这一点,或者我只使用.not().而不是.not.更好?

72qzrwbm

72qzrwbm1#

您可以使用Object.defineProperty

Object.defineProperty(a, 'not', {
    get: function(){
        this.is_not=true;
        return this
    }
})

注意:在一个属性getter中修改this是一个很奇怪的设计,我强烈建议做一个拷贝。

vuktfyat

vuktfyat2#

mousetail的答案是有效的,但为了用ES6的方式给予答案,我最终使用了以下代码,因为它编译为Object.defineProperty

class Validation {
  errors: ValidationErrorItem[] = [];
  is_not = false;

  get not() {
    this.is_not = true;
    return this;
  }
  . . .

相关问题