maybe abuse .d.ts files to add an alternate signature for evaluate() which enforces the context
evaluate()