realar-project / realar

5 kB Advanced state manager for React
MIT License
45 stars 0 forks source link

normal: Ensurable watch typings bug #62

Closed betula closed 3 years ago

betula commented 3 years ago
const swipeOffset = value(0);
const local_offset = value(0);
const stop = signal.stop();

const k = swipeOffset.flow.filter(() => !stop.val);

k.watch(local_offset);

Argument of type 'Value<number, number>' is not assignable to parameter of type '(value: Ensurable<number>, prev: Ensurable<number>) => void'.
  Types of parameters 'data' and 'value' are incompatible.
    Type 'Ensurable<number>' is not assignable to type 'number'.
      Type 'void' is not assignable to type 'number'
betula commented 3 years ago
    signal
      .from(() => this.times)
      .flow.filter(() => this.loaded)
      .watch((times) => this.save(times as any)); // Ensurable<number> not number
betula commented 3 years ago
  const locked = value(true);
  const code = signal('1122121122');

  code
    .flow.filter((track) => !track)
    .watch(() => locked.update(f => !f));

  const key = signal<number|string>();

  code.sub(key, (k, state) => {
    if (state[0] === ''+k) { // Ensurable<string|number> here
      return state.slice(1);
    }
    return state;
  });
betula commented 3 years ago

Implemented in 0.6.0

const swipeOffset = signal(0);
const local_offset = value(0);
const stop = signal.trigger.flag();

const k = swipeOffset.filter(() => !stop.val);

k.to(local_offset);
const locked = value(true);
const code = signal('1122121122');

code
  .filter((track) => !track)
  .to(() => locked.update(f => !f));

const key = signal<number|string>();

code.update.by(key, (state, k) => {
  if (state[0] === ''+k) {
    return state.slice(1);
  }
  return state;
});