SyntaxError: getter and setter for private name #x should either be both static or non-static

The JavaScript exception "mismatched placement" occurs when a private getter and setter are mismatched in whether or not they are static.

Message

SyntaxError: Identifier '#x' has already been declared (V8-based)
SyntaxError: getter and setter for private name #x should either be both static or non-static (Firefox)
SyntaxError: Cannot declare a private non-static getter if there is a static private setter with used name. (Safari)

Error type

What went wrong?

Private getters and setters for the same name must either be both static, or both non-static. This limitation does not exist for public methods.

Examples

Mismatched placement

js
class Test {
  static set #foo(_) {}
  get #foo() {}
}

// SyntaxError: getter and setter for private name #foo should either be both static or non-static

Since foo is private, the methods must be either both static:

js
class Test {
  static set #foo(_) {}
  static get #foo() {}
}

or non-static:

js
class Test {
  set #foo(_) {}
  get #foo() {}
}

See also