]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
types: improve computed types (#343)
authorDmitry Sharshakov <d3dx12.xx@gmail.com>
Mon, 21 Oct 2019 17:57:20 +0000 (20:57 +0300)
committerEvan You <yyx990803@gmail.com>
Mon, 21 Oct 2019 17:57:20 +0000 (13:57 -0400)
packages/reactivity/src/computed.ts
packages/reactivity/src/index.ts
packages/runtime-core/src/apiOptions.ts
packages/runtime-core/src/apiReactivity.ts

index c0af4a6478d20d7ea998bb742575a3978651aaf9..162eb76738fdf67e511ac45537dce6791fcbeb5d 100644 (file)
@@ -10,21 +10,24 @@ export interface WritableComputedRef<T> extends Ref<T> {
   readonly effect: ReactiveEffect<T>
 }
 
+export type ComputedGetter<T> = () => T
+export type ComputedSetter<T> = (v: T) => void
+
 export interface WritableComputedOptions<T> {
-  get: () => T
-  set: (v: T) => void
+  get: ComputedGetter<T>
+  set: ComputedSetter<T>
 }
 
-export function computed<T>(getter: () => T): ComputedRef<T>
+export function computed<T>(getter: ComputedGetter<T>): ComputedRef<T>
 export function computed<T>(
   options: WritableComputedOptions<T>
 ): WritableComputedRef<T>
 export function computed<T>(
-  getterOrOptions: (() => T) | WritableComputedOptions<T>
+  getterOrOptions: ComputedGetter<T> | WritableComputedOptions<T>
 ): any {
   const isReadonly = isFunction(getterOrOptions)
   const getter = isReadonly
-    ? (getterOrOptions as (() => T))
+    ? (getterOrOptions as ComputedGetter<T>)
     : (getterOrOptions as WritableComputedOptions<T>).get
   const setter = isReadonly
     ? __DEV__
index febfac082b8f12b42f94e2944bba96f0623f547f..5525e2274fdeb6a2501373702c9d03004c38185e 100644 (file)
@@ -12,7 +12,9 @@ export {
   computed,
   ComputedRef,
   WritableComputedRef,
-  WritableComputedOptions
+  WritableComputedOptions,
+  ComputedGetter,
+  ComputedSetter
 } from './computed'
 export {
   effect,
index d3a87ade6dd2e96b08d562f5708ca8b142a7234a..ad1c29b437bb0024f6e0704aefa822b466a78bc5 100644 (file)
@@ -30,7 +30,11 @@ import {
   DebuggerHook,
   ErrorCapturedHook
 } from './apiLifecycle'
-import { reactive } from '@vue/reactivity'
+import {
+  reactive,
+  ComputedGetter,
+  WritableComputedOptions
+} from '@vue/reactivity'
 import { ComponentObjectPropsOptions, ExtractPropTypes } from './componentProps'
 import { Directive } from './directives'
 import { ComponentPublicInstance } from './componentProxy'
@@ -100,14 +104,10 @@ export type ComponentOptions =
 // TODO legacy component definition also supports constructors with .options
 type LegacyComponent = ComponentOptions
 
-export interface ComputedOptions {
-  [key: string]:
-    | Function
-    | {
-        get: Function
-        set: Function
-      }
-}
+export type ComputedOptions = Record<
+  string,
+  ComputedGetter<any> | WritableComputedOptions<any>
+>
 
 export interface MethodOptions {
   [key: string]: Function
index 76092b9f34e7810341b478d6db6a8c5e7db4231e..d603257249bd8db88800df1eab71b2d1f877d9f3 100644 (file)
@@ -26,7 +26,8 @@ import {
   ComputedRef,
   WritableComputedOptions,
   ReactiveEffect,
-  WritableComputedRef
+  WritableComputedRef,
+  ComputedGetter
 } from '@vue/reactivity'
 
 import { currentInstance } from './component'
@@ -39,12 +40,12 @@ export function recordEffect(effect: ReactiveEffect) {
   }
 }
 
-export function computed<T>(getter: () => T): ComputedRef<T>
+export function computed<T>(getter: ComputedGetter<T>): ComputedRef<T>
 export function computed<T>(
   options: WritableComputedOptions<T>
 ): WritableComputedRef<T>
 export function computed<T>(
-  getterOrOptions: (() => T) | WritableComputedOptions<T>
+  getterOrOptions: ComputedGetter<T> | WritableComputedOptions<T>
 ) {
   const c = _computed(getterOrOptions as any)
   recordEffect(c.effect)