diff --git a/packages/dts-test/ref.test-d.ts b/packages/dts-test/ref.test-d.ts index f8f2500aa1d..b6e055dfb4b 100644 --- a/packages/dts-test/ref.test-d.ts +++ b/packages/dts-test/ref.test-d.ts @@ -184,6 +184,26 @@ describe('allow getter and setter types to be unrelated', () => { e.value = d }) +// computed +describe('allow computed getter and setter types to be unrelated', () => { + const obj = ref({ + name: 'foo', + }) + + const c = computed({ + get() { + return JSON.stringify(obj.value) + }, + set(val: typeof obj.value) { + obj.value = val + }, + }) + + c.value = { name: 'bar' } // object + + expectType(c.value) +}) + // shallowRef type Status = 'initial' | 'ready' | 'invalidating' const shallowStatus = shallowRef('initial') diff --git a/packages/reactivity/src/computed.ts b/packages/reactivity/src/computed.ts index 5dedecfe6bb..06a287fcd88 100644 --- a/packages/reactivity/src/computed.ts +++ b/packages/reactivity/src/computed.ts @@ -20,7 +20,7 @@ export interface ComputedRef extends WritableComputedRef { [ComputedRefSymbol]: true } -export interface WritableComputedRef extends Ref { +export interface WritableComputedRef extends Ref { /** * @deprecated computed no longer uses effect */ @@ -30,9 +30,9 @@ export interface WritableComputedRef extends Ref { export type ComputedGetter = (oldValue?: T) => T export type ComputedSetter = (newValue: T) => void -export interface WritableComputedOptions { +export interface WritableComputedOptions { get: ComputedGetter - set: ComputedSetter + set: ComputedSetter } /** @@ -175,10 +175,10 @@ export function computed( getter: ComputedGetter, debugOptions?: DebuggerOptions, ): ComputedRef -export function computed( - options: WritableComputedOptions, +export function computed( + options: WritableComputedOptions, debugOptions?: DebuggerOptions, -): WritableComputedRef +): WritableComputedRef export function computed( getterOrOptions: ComputedGetter | WritableComputedOptions, debugOptions?: DebuggerOptions,