Callbacks vs Methods
To begin, let's quickly define two Luau terms:
- A "callback" is a function that is called in the form of
foo.bar()
. - A "method" is a function that is called in the form of
foo:bar()
.- The parameter
self
is implicitly passed as the value offoo
.
- The parameter
However, in TypeScript, all functions inside of objects are called as simply foo.bar()
. To decide whether or not a function call should compile using .
or :
, roblox-ts follows a simple set of rules:
Callbacks
- Function declarations are considered callbacks.
function foo(bar: number) {}
const obj = { foo: foo };
obj.foo(123); // obj.foo(123)
- Arrow function expressions are considered callbacks.
const obj = {
foo: (bar: number) => {}
}
obj.foo(123); // obj.foo(123)
Methods
- Method declarations are considered methods.
const obj = {
foo(bar: number) {}
}
obj.foo(123); // obj:foo(123)
- Function expressions inside of object literals are considered methods.
const obj = {
foo: function (bar: number) {}
}
obj.foo(123); // obj:foo(123)
Overrides
- If a function has a parameter
this: void
, it is always considered to be a callback.
const obj = {
foo(this: void, bar: number) {}
}
obj.foo(123); // obj.foo(123)
- If a function has a parameter
this
which is typed as anything exceptvoid
, it is always considered to be a method.
declare const obj: {
foo: (this: typeof obj, bar: number) => void;
}
obj.foo(123); // obj:foo(123)