Rule: no-unbound-method

Warns when a method is used outside of a method call.

Rationale

Class functions don’t preserve the class scope when passed as standalone variables. For example, this code will log the global scope (window/global), not the class instance:

class MyClass {
    public log(): void {
        console.log(this);
    }
}

const instance = new MyClass();
const log = instance.log;

log();

You need to either use an arrow lambda (() => {...}) or call the function with the correct scope.

class MyClass {
    public logArrowBound = (): void => {
        console.log(bound);
    };

    public logManualBind(): void {
        console.log(this);
    }
}

const instance = new MyClass();
const logArrowBound = instance.logArrowBound;
const logManualBind = instance.logManualBind.bind(instance);

logArrowBound();
logManualBind();
Notes:

Config

You may additionally pass “ignore-static” to ignore static methods, or an options object.

The object may have the following properties:

  • “ignore-static” - to ignore static methods.
  • “allow-delete” - ignore methods referenced in a delete expression.
  • “allow-typeof” - ignore methods referenced in a typeof expression.
  • “whitelist” - ignore method references in parameters of specifed function calls.
Config examples
"no-unbound-method": true
"no-unbound-method": [true, "ignore-static"]
"no-unbound-method": [true, {"ignore-static": true, "whitelist": ["expect"], "allow-typeof": true}]
Schema
{
  "anyOf": [
    {
      "type": "string",
      "enum": [
        "ignore-static"
      ]
    },
    {
      "type": "object",
      "properties": {
        "allow-delete": {
          "type": "boolean"
        },
        "allow-typeof": {
          "type": "boolean"
        },
        "ignore-static": {
          "type": "boolean"
        },
        "whitelist": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minLength": 1
        }
      }
    }
  ]
}