}
export interface WritableComputedRef<T> extends Ref<T> {
- readonly effect: ReactiveEffect
+ readonly effect: ReactiveEffect<T>
}
export interface WritableComputedOptions<T> {
import { OperationTypes } from './operations'
import { isObject } from '@vue/shared'
import { reactive } from './reactive'
+import { ComputedRef, WritableComputedRef } from './computed'
export const refSymbol = Symbol(__DEV__ ? 'refSymbol' : '')
// Recursively unwraps nested value bindings.
export type UnwrapRef<T> = {
+ cRef: T extends ComputedRef<infer V> ? UnwrapRef<V> : T
+ wcRef: T extends WritableComputedRef<infer V> ? UnwrapRef<V> : T
ref: T extends Ref<infer V> ? UnwrapRef<V> : T
array: T extends Array<infer V> ? Array<UnwrapRef<V>> : T
object: { [K in keyof T]: UnwrapRef<T[K]> }
stop: T
-}[T extends Ref
- ? 'ref'
- : T extends Array<any>
- ? 'array'
- : T extends BailTypes
- ? 'stop' // bail out on types that shouldn't be unwrapped
- : T extends object ? 'object' : 'stop']
+}[T extends ComputedRef<any>
+ ? 'cRef'
+ : T extends WritableComputedRef<any>
+ ? 'wcRef'
+ : T extends Ref
+ ? 'ref'
+ : T extends Array<any>
+ ? 'array'
+ : T extends BailTypes
+ ? 'stop' // bail out on types that shouldn't be unwrapped
+ : T extends object ? 'object' : 'stop']
// only unwrap nested ref
export type UnwrapNestedRefs<T> = T extends Ref ? T : UnwrapRef<T>