-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
/
index.ts
33 lines (31 loc) · 1.06 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import type { ComputedRef, Ref, ToRef } from 'vue-demi'
import {
customRef,
readonly,
ref,
// eslint-disable-next-line no-restricted-imports
toRef as vueToRef,
} from 'vue-demi'
import type { MaybeRefOrGetter } from '../utils'
import { noop } from '../utils'
/**
* Normalize value/ref/getter to `ref` or `computed`.
*/
export function toRef<T>(r: () => T): Readonly<Ref<T>>
export function toRef<T>(r: ComputedRef<T>): ComputedRef<T>
export function toRef<T>(r: MaybeRefOrGetter<T>): Ref<T>
export function toRef<T>(r: T): Ref<T>
export function toRef<T extends object, K extends keyof T>(object: T, key: K): ToRef<T[K]>
export function toRef<T extends object, K extends keyof T>(object: T, key: K, defaultValue: T[K]): ToRef<Exclude<T[K], undefined>>
export function toRef(...args: any[]) {
if (args.length !== 1)
return vueToRef(...args as [any, any])
const r = args[0]
return typeof r === 'function'
? readonly(customRef(() => ({ get: r as any, set: noop })))
: ref(r)
}
/**
* @deprecated use `toRef` instead
*/
export const resolveRef = toRef