import { isObject } from '@vue/shared'
import { reactive } from './reactive'
-export const refSymbol = Symbol()
-export type RefSymbol = typeof refSymbol
+export const refSymbol = Symbol(__DEV__ ? 'refSymbol' : undefined)
export interface Ref<T> {
- _isRef: RefSymbol
+ [refSymbol]: true
value: UnwrapNestedRefs<T>
}
export function ref<T>(raw: T): Ref<T> {
raw = convert(raw)
const v = {
- _isRef: refSymbol,
+ [refSymbol]: true,
get value() {
track(v, OperationTypes.GET, '')
return raw
}
export function isRef(v: any): v is Ref<any> {
- return v ? v._isRef === refSymbol : false
+ return v ? v[refSymbol] === true : false
}
export function toRefs<T extends object>(
key: K
): Ref<T[K]> {
const v = {
- _isRef: refSymbol,
+ [refSymbol]: true,
get value() {
return object[key]
},