diff --git a/packages/reactivity/src/computed.ts b/packages/reactivity/src/computed.ts index b24484c9e62..76064fa09f4 100644 --- a/packages/reactivity/src/computed.ts +++ b/packages/reactivity/src/computed.ts @@ -11,19 +11,22 @@ export interface ComputedRef extends WritableComputedRef { [ComputedRefSymbol]: true } -export interface WritableComputedRef extends Ref { +export interface WritableComputedRef extends Ref { + // @ts-ignore + get value(): T + set value(newValue: S) readonly effect: ReactiveEffect } export type ComputedGetter = (...args: any[]) => T export type ComputedSetter = (v: T) => void -export interface WritableComputedOptions { +export interface WritableComputedOptions { get: ComputedGetter - set: ComputedSetter + set: ComputedSetter } -export class ComputedRefImpl { +export class ComputedRefImpl { public dep?: Dep = undefined private _value!: T @@ -37,7 +40,7 @@ export class ComputedRefImpl { constructor( getter: ComputedGetter, - private readonly _setter: ComputedSetter, + private readonly _setter: ComputedSetter, isReadonly: boolean, isSSR: boolean ) { @@ -60,10 +63,10 @@ export class ComputedRefImpl { self._dirty = false self._value = self.effect.run()! } - return self._value + return self._value as any } - set value(newValue: T) { + set value(newValue: S) { this._setter(newValue) } } @@ -109,13 +112,17 @@ export function computed( options: WritableComputedOptions, debugOptions?: DebuggerOptions ): WritableComputedRef -export function computed( - getterOrOptions: ComputedGetter | WritableComputedOptions, +export function computed( + options: WritableComputedOptions, + debugOptions?: DebuggerOptions +): WritableComputedRef +export function computed( + getterOrOptions: ComputedGetter | WritableComputedOptions, debugOptions?: DebuggerOptions, isSSR = false ) { let getter: ComputedGetter - let setter: ComputedSetter + let setter: ComputedSetter const onlyGetter = isFunction(getterOrOptions) if (onlyGetter) { diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index d4a34edfef4..4ef045998dd 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -59,7 +59,7 @@ export class ReactiveEffect { * Can be attached after creation * @internal */ - computed?: ComputedRefImpl + computed?: ComputedRefImpl /** * @internal */