Требуемая переменная должна быть статической. В настоящее время переменная begin
является локальной для вашей функции start
. Кроме того, вам не нужно хранить ссылку на значение, возвращаемое clearInterval
. Лучшее имя для begin
будет interval
или intervalId
class Helpers {
static interval;
static start(value: Vehicle): void {
Helpers.interval = setInterval(value.calculateSpeed, 1000, value);
}
static stop() {
clearInterval(Helpers.interval);
}
}
Обновление:
Однако делать статический intervelId
не очень хорошая идея, так как вы можете использовать этот класс Helper в нескольких местах одновременно. Если сделать его статическим, то будет создана единственная копия переменной, что может привести к проблемам.
Лучшим подходом было бы что-то вроде этого:
class Helpers {
private _intervalId;
start(value: Vehicle): void {
this._intervalId = setInterval(value.calculateSpeed, 1000, value);
}
stop() {
clearInterval(this._intervalId);
}
}
А для вызова функции вы можете использовать несколько объектов:
const helper:Helpers = new Helpers();
helper.start();
Кроме того, убедитесь, что helper.start();
вызывается не более одного раза, прежде чем он остановится с тем же объектом. Чтобы правильно обработать этот крайний случай, вы можете проверить значение _intervalId
в start()
и выдать некоторую ошибку, если она уже установлена. В случае stop()
вы можете установить this._intervalId = null