Skip to content

Commit

Permalink
feat(toRef): support two argument overrides from Vue
Browse files Browse the repository at this point in the history
  • Loading branch information
antfu committed Apr 13, 2023
1 parent b827409 commit f307ff7
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions packages/shared/toRef/index.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
import type { ComputedRef, Ref } from 'vue-demi'
import { computed, ref } from 'vue-demi'
import type { ComputedRef, Ref, ToRef } from 'vue-demi'
import { customRef, ref, toRef as vueToRef } from 'vue-demi'
import type { MaybeComputedRef, MaybeRef } from '../utils'
import { noop } from '../utils'

/**
* Normalize value/ref/getter to `ref` or `computed`.
*/
export function toRef<T>(r: MaybeComputedRef<T>): ComputedRef<T>
export function toRef<T>(r: MaybeRef<T>): Ref<T>
export function toRef<T>(r: T): Ref<T>
export function toRef<T>(r: MaybeComputedRef<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<T>(...args: any[]) {
if (args.length !== 1)
return vueToRef(...args as [any, any])
const r = args[0]
return typeof r === 'function'
? computed<T>(r as any)
? customRef(() => ({ get: r as any, set: noop }))
: ref(r)
}

Expand Down

0 comments on commit f307ff7

Please sign in to comment.