У меня есть класс Command
, определенный так
class Command {
constructor(name, permission, callback)
{
this.name = name;
this.permission = permission;
this.callback = callback;
}
}
module.exports.command = Command;
Есть ли способ предопределить структуру callback
, чтобы каждый раз ему требовались одни и те же параметры, поэтому вы можете определить его только одним способом?
Например, если бы я хотел, чтобы функция обратного вызова всегда имела аргументы client
и args
, тогда конструктор принимал бы обратный вызов только с аргументами client
и args
.
@estus Я отредактировал это, надеюсь, это прояснит
Что такое определить это одним способом? Пожалуйста, опишите, как вы ожидаете, что класс и обратный вызов будут вести себя.
@estus отредактировал его с примером, теперь должно быть хорошо :p
Можно утверждать арность функции:
if (callback.length !== 2)
throw new Error('Callback should have 2 parameters');
В некоторых случаях допустимо полагаться на арность функций. Но это потенциальный антипаттерн, который может быть вреден по-разному, особенно после выхода ES6.
Значения по умолчанию или оператор rest могут сделать функцию без параметров, хотя это не так:
(function (foo = 1) {}).length === 0;
(function (...args) {}).length === 0;
Поэтому теоретически я должен просто предположить, что класс будет использоваться ответственно, и просто надеяться на лучшее.
да. Достаточно надлежащей документации (JSDoc). Вы можете использовать типизированный JS (TypeScript или Flow), если хотите решить такие потенциальные проблемы во время сборки.