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__
computed,
ComputedRef,
WritableComputedRef,
- WritableComputedOptions
+ WritableComputedOptions,
+ ComputedGetter,
+ ComputedSetter
} from './computed'
export {
effect,
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'
// 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
ComputedRef,
WritableComputedOptions,
ReactiveEffect,
- WritableComputedRef
+ WritableComputedRef,
+ ComputedGetter
} from '@vue/reactivity'
import { currentInstance } from './component'
}
}
-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)