сейчас конструктор Cell такой:
constructor(value?: T, opts?: ICellOptions<T>);
constructor(pull: ICellPull, opts?: ICellOptions<T>);
На мой взгляд правильнее добавить pull в ICellOptions, тем более что там уже есть put, reap и т.д.
interface ICellOptions<T> {
pull: (push: (value: any) => void, fail: (err: any) => void, oldValue: any): any;
...
Тогда и неаккуратность с oldValue === undefined при первом выполнении pull разрешится:
cellx(1, {
pull(push, fail, oldValue) {
}
})
Да и в принципе oldValue в pull не нужен вроде в таком случае.
Есть еще один аспект, например когда pull функция генерируется кем-то, можно не генерить функции, а экземпляр класса создать, ресурсов меньше.
сейчас конструктор Cell такой:
На мой взгляд правильнее добавить pull в ICellOptions, тем более что там уже есть put, reap и т.д.
Тогда и неаккуратность с oldValue === undefined при первом выполнении pull разрешится:
Да и в принципе oldValue в pull не нужен вроде в таком случае.
Есть еще один аспект, например когда pull функция генерируется кем-то, можно не генерить функции, а экземпляр класса создать, ресурсов меньше.