diff --git a/packages/reactivity/src/index.ts b/packages/reactivity/src/index.ts index d26e87de9a8..b15f4d807be 100644 --- a/packages/reactivity/src/index.ts +++ b/packages/reactivity/src/index.ts @@ -9,6 +9,7 @@ export { customRef, triggerRef, Ref, + ToRef, ToRefs, UnwrapRef, ShallowUnwrapRef, @@ -51,7 +52,8 @@ export { ReactiveEffectOptions, EffectScheduler, DebuggerOptions, - DebuggerEvent + DebuggerEvent, + DebuggerEventExtraInfo } from './effect' export { effectScope, diff --git a/packages/reactivity/src/ref.ts b/packages/reactivity/src/ref.ts index 0747f8e1314..94821dade6f 100644 --- a/packages/reactivity/src/ref.ts +++ b/packages/reactivity/src/ref.ts @@ -5,7 +5,7 @@ import { reactive, isProxy, toRaw, isReactive } from './reactive' import { CollectionTypes } from './collectionHandlers' import { createDep, Dep } from './dep' -export declare const RefSymbol: unique symbol +declare const RefSymbol: unique symbol export interface Ref { value: T @@ -60,13 +60,6 @@ export function triggerRefValue(ref: RefBase, newVal?: any) { } } -export type ToRef = [T] extends [Ref] ? T : Ref> -export type ToRefs = { - // #2687: somehow using ToRef here turns the resulting type into - // a union of multiple Ref<*> types instead of a single Ref<* | *> type. - [K in keyof T]: T[K] extends Ref ? T[K] : Ref> -} - const convert = (val: T): T => isObject(val) ? reactive(val) : val @@ -154,7 +147,7 @@ export function proxyRefs( : new Proxy(objectWithRefs, shallowUnwrapHandlers) } -export type CustomRefFactory = ( +type CustomRefFactory = ( track: () => void, trigger: () => void ) => { @@ -192,6 +185,11 @@ export function customRef(factory: CustomRefFactory): Ref { return new CustomRefImpl(factory) as any } +export type ToRefs = { + // #2687: somehow using ToRef here turns the resulting type into + // a union of multiple Ref<*> types instead of a single Ref<* | *> type. + [K in keyof T]: T[K] extends Ref ? T[K] : Ref> +} export function toRefs(object: T): ToRefs { if (__DEV__ && !isProxy(object)) { console.warn(`toRefs() expects a reactive object but received a plain one.`) @@ -217,6 +215,7 @@ class ObjectRefImpl { } } +export type ToRef = [T] extends [Ref] ? T : Ref> export function toRef( object: T, key: K diff --git a/packages/runtime-core/src/index.ts b/packages/runtime-core/src/index.ts index c46b6df2276..75d94f29fe5 100644 --- a/packages/runtime-core/src/index.ts +++ b/packages/runtime-core/src/index.ts @@ -147,17 +147,18 @@ declare module '@vue/reactivity' { } export { + Ref, + ToRef, + ToRefs, ReactiveEffectOptions, DebuggerEvent, TrackOpTypes, TriggerOpTypes, - Ref, ComputedRef, WritableComputedRef, UnwrapRef, ShallowUnwrapRef, WritableComputedOptions, - ToRefs, DeepReadonly } from '@vue/reactivity' export {