@rbxts/jsnatives
Object.isCallable
Determines whether a value is a callable function.
Signature
function isCallable<T>(obj: unknown): obj is Callbackfunction isCallable<T extends object>(obj: T): obj is T & CallbackDescription
The Object.isCallable() method determines whether a value is a function that can be called. This includes regular functions, methods, and objects with a __call metatable or apply trap for proxies.
The method returns a type predicate that narrows the type to Callback or T & Callback depending on the input.
Examples
Basic function check
const func = function() { return "hello"; };const obj = {a: 1, b: 2};
print(Object.isCallable(func)); // trueprint(Object.isCallable(obj)); // falseWorking with proxies
const callableProxy = new Proxy({}, { apply: () => { return 1; }});
const regularProxy = new Proxy({}, {});
print(Object.isCallable(callableProxy)); // trueprint(Object.isCallable(regularProxy)); // falseWorking with metatables
const callableMetatable = setmetatable({}, { __call: () => { return 1; }});
print(Object.isCallable(callableMetatable)); // trueType narrowing
function processValue(value: unknown) { if (Object.isCallable(value)) { // In this block, value is typed as Callback const result = value(); return result; } else { // In this block, value is still unknown return "Not a function"; }}
function processObject<T extends object>(obj: T) { if (Object.isCallable(obj)) { // In this block, obj is typed as T & Callback const result = obj(); return result; } else { // In this block, obj is still T return obj; }}