From c40be735303f75ed58b665b52b0a03707a734053 Mon Sep 17 00:00:00 2001 From: Oleg Shibaev Date: Sun, 10 Apr 2022 17:11:21 +0300 Subject: [PATCH 1/4] types(reactivity): disallow using functions with arguments as a computed getter close #5692 --- packages/reactivity/src/computed.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/reactivity/src/computed.ts b/packages/reactivity/src/computed.ts index ab0034a4cf1..506290ced08 100644 --- a/packages/reactivity/src/computed.ts +++ b/packages/reactivity/src/computed.ts @@ -15,7 +15,7 @@ export interface WritableComputedRef extends Ref { readonly effect: ReactiveEffect } -export type ComputedGetter = (...args: any[]) => T +export type ComputedGetter = () => T export type ComputedSetter = (v: T) => void export interface WritableComputedOptions { From a9e8642f8a0a88ce4290410f036e94162bd0aabd Mon Sep 17 00:00:00 2001 From: Oleg Shibaev Date: Sun, 10 Apr 2022 17:46:46 +0300 Subject: [PATCH 2/4] types(reactivity): make sure getters defined with arrow functions work in options API Add special versions of ComputedGetter and WritableComputedOptions that accept view model as argument --- packages/reactivity/src/computed.ts | 6 ++++++ packages/reactivity/src/index.ts | 2 ++ packages/runtime-core/src/componentOptions.ts | 6 +++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/reactivity/src/computed.ts b/packages/reactivity/src/computed.ts index 506290ced08..3f2c2b23e3b 100644 --- a/packages/reactivity/src/computed.ts +++ b/packages/reactivity/src/computed.ts @@ -16,6 +16,7 @@ export interface WritableComputedRef extends Ref { } export type ComputedGetter = () => T +export type ComputedGetterWithVModel = (vm: any) => T export type ComputedSetter = (v: T) => void export interface WritableComputedOptions { @@ -23,6 +24,11 @@ export interface WritableComputedOptions { set: ComputedSetter } +export interface WritableComputedOptionsWithVModel { + get: ComputedGetterWithVModel + set: ComputedSetter +} + export class ComputedRefImpl { public dep?: Dep = undefined diff --git a/packages/reactivity/src/index.ts b/packages/reactivity/src/index.ts index a7a03b8c573..54f7cbda88f 100644 --- a/packages/reactivity/src/index.ts +++ b/packages/reactivity/src/index.ts @@ -38,7 +38,9 @@ export { ComputedRef, WritableComputedRef, WritableComputedOptions, + WritableComputedOptionsWithVModel, ComputedGetter, + ComputedGetterWithVModel, ComputedSetter } from './computed' export { deferredComputed } from './deferredComputed' diff --git a/packages/runtime-core/src/componentOptions.ts b/packages/runtime-core/src/componentOptions.ts index 0d47e18c4af..9d4fb7bc020 100644 --- a/packages/runtime-core/src/componentOptions.ts +++ b/packages/runtime-core/src/componentOptions.ts @@ -46,8 +46,8 @@ import { } from './apiLifecycle' import { reactive, - ComputedGetter, - WritableComputedOptions + ComputedGetterWithVModel, + WritableComputedOptionsWithVModel } from '@vue/reactivity' import { ComponentObjectPropsOptions, @@ -360,7 +360,7 @@ export type ComponentOptionsMixin = ComponentOptionsBase< export type ComputedOptions = Record< string, - ComputedGetter | WritableComputedOptions + ComputedGetterWithVModel | WritableComputedOptionsWithVModel > export interface MethodOptions { From ecf051b7b5c582b7f5425530bde4fecae6a3c0f1 Mon Sep 17 00:00:00 2001 From: Oleg Shibaev Date: Thu, 14 Apr 2022 19:14:13 +0300 Subject: [PATCH 3/4] types(reactivity): fix type inference in computed options Relax type of ComputedGetterWithVModel --- packages/reactivity/src/computed.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/reactivity/src/computed.ts b/packages/reactivity/src/computed.ts index 3f2c2b23e3b..ae72218364b 100644 --- a/packages/reactivity/src/computed.ts +++ b/packages/reactivity/src/computed.ts @@ -16,7 +16,7 @@ export interface WritableComputedRef extends Ref { } export type ComputedGetter = () => T -export type ComputedGetterWithVModel = (vm: any) => T +export type ComputedGetterWithVModel = (...args: any[]) => T export type ComputedSetter = (v: T) => void export interface WritableComputedOptions { From 363d6e90799cd0ddaeca150a1e9cd41893b1e70c Mon Sep 17 00:00:00 2001 From: Oleg Shibaev Date: Thu, 14 Apr 2022 19:22:25 +0300 Subject: [PATCH 4/4] types(reactivity): rename ComputedGetterWithVModel to ComputedGetterWithInstance --- packages/reactivity/src/computed.ts | 6 +++--- packages/reactivity/src/index.ts | 4 ++-- packages/runtime-core/src/componentOptions.ts | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/reactivity/src/computed.ts b/packages/reactivity/src/computed.ts index ae72218364b..6947b749749 100644 --- a/packages/reactivity/src/computed.ts +++ b/packages/reactivity/src/computed.ts @@ -16,7 +16,7 @@ export interface WritableComputedRef extends Ref { } export type ComputedGetter = () => T -export type ComputedGetterWithVModel = (...args: any[]) => T +export type ComputedGetterWithInstance = (...args: any[]) => T export type ComputedSetter = (v: T) => void export interface WritableComputedOptions { @@ -24,8 +24,8 @@ export interface WritableComputedOptions { set: ComputedSetter } -export interface WritableComputedOptionsWithVModel { - get: ComputedGetterWithVModel +export interface WritableComputedOptionsWithInstance { + get: ComputedGetterWithInstance set: ComputedSetter } diff --git a/packages/reactivity/src/index.ts b/packages/reactivity/src/index.ts index 54f7cbda88f..382d635d11d 100644 --- a/packages/reactivity/src/index.ts +++ b/packages/reactivity/src/index.ts @@ -38,9 +38,9 @@ export { ComputedRef, WritableComputedRef, WritableComputedOptions, - WritableComputedOptionsWithVModel, + WritableComputedOptionsWithInstance, ComputedGetter, - ComputedGetterWithVModel, + ComputedGetterWithInstance, ComputedSetter } from './computed' export { deferredComputed } from './deferredComputed' diff --git a/packages/runtime-core/src/componentOptions.ts b/packages/runtime-core/src/componentOptions.ts index 9d4fb7bc020..6a5a313f771 100644 --- a/packages/runtime-core/src/componentOptions.ts +++ b/packages/runtime-core/src/componentOptions.ts @@ -46,8 +46,8 @@ import { } from './apiLifecycle' import { reactive, - ComputedGetterWithVModel, - WritableComputedOptionsWithVModel + ComputedGetterWithInstance, + WritableComputedOptionsWithInstance } from '@vue/reactivity' import { ComponentObjectPropsOptions, @@ -360,7 +360,7 @@ export type ComponentOptionsMixin = ComponentOptionsBase< export type ComputedOptions = Record< string, - ComputedGetterWithVModel | WritableComputedOptionsWithVModel + ComputedGetterWithInstance | WritableComputedOptionsWithInstance > export interface MethodOptions {