_shallow?: boolean
}
-export type ToRefs<T = any> = { [K in keyof T]: Ref<T[K]> }
+export type ToRef<T> = T extends Ref ? T : Ref<UnwrapRef<T>>
+export type ToRefs<T = any> = { [K in keyof T]: ToRef<T[K]> }
const convert = <T extends unknown>(val: T): T =>
isObject(val) ? reactive(val) : val
return Boolean(r && r.__v_isRef === true)
}
-export function ref<T extends object>(
- value: T
-): T extends Ref ? T : Ref<UnwrapRef<T>>
+export function ref<T extends object>(value: T): ToRef<T>
export function ref<T>(value: T): Ref<UnwrapRef<T>>
export function ref<T = any>(): Ref<T | undefined>
export function ref(value?: unknown) {
export function toRef<T extends object, K extends keyof T>(
object: T,
key: K
-): Ref<T[K]> {
+): ToRef<T[K]> {
return isRef(object[key])
? object[key]
: (new ObjectRefImpl(object, key) as any)
unref,
reactive,
expectType,
- proxyRefs
+ proxyRefs,
+ toRef,
+ toRefs
} from './index'
function plainType(arg: number | Ref<number>) {
const p2 = proxyRefs(r2)
expectType<number>(p2.a)
expectType<Ref<string>>(p2.obj.k)
+
+// toRef
+const obj = {
+ a: 1,
+ b: ref(1)
+}
+expectType<Ref<number>>(toRef(obj, 'a'))
+expectType<Ref<number>>(toRef(obj, 'b'))
+
+// toRefs
+const objRefs = toRefs(obj)
+expectType<{
+ a: Ref<number>
+ b: Ref<number>
+}>(objRefs)