MaybeRef,
MaybeRefOrGetter,
ComputedRef,
- computed
+ computed,
+ ShallowRef
} from 'vue'
-import { expectType, describe } from './utils'
+import { expectType, describe, IsUnion } from './utils'
function plainType(arg: number | Ref<number>) {
// ref coercing
refStatus.value = 'invalidating'
}
+{
+ const shallow = shallowRef(1)
+ expectType<Ref<number>>(shallow)
+ expectType<ShallowRef<number>>(shallow)
+}
+
+{
+ //#7852
+ type Steps = { step: '1' } | { step: '2' }
+ const shallowUnionGenParam = shallowRef<Steps>({ step: '1' })
+ const shallowUnionAsCast = shallowRef({ step: '1' } as Steps)
+
+ expectType<IsUnion<typeof shallowUnionGenParam>>(false)
+ expectType<IsUnion<typeof shallowUnionAsCast>>(false)
+}
+
+describe('shallowRef with generic', <T>() => {
+ const r = ref({}) as MaybeRef<T>
+ expectType<ShallowRef<T> | Ref<T>>(shallowRef(r))
+})
+
// proxyRefs: should return `reactive` directly
const r1 = reactive({
k: 'v'
-import { ref, computed, watch, defineComponent } from 'vue'
+import { ref, computed, watch, defineComponent, shallowRef } from 'vue'
import { expectType } from './utils'
const source = ref('foo')
)
}
})
+
+{
+ //#7852
+ type Steps = { step: '1' } | { step: '2' }
+ const shallowUnionGenParam = shallowRef<Steps>({ step: '1' })
+ const shallowUnionAsCast = shallowRef({ step: '1' } as Steps)
+
+ watch(shallowUnionGenParam, value => {
+ expectType<Steps>(value)
+ })
+ watch(shallowUnionAsCast, value => {
+ expectType<Steps>(value)
+ })
+}
* @param value - The "inner value" for the shallow ref.
* @see {@link https://vuejs.org/api/reactivity-advanced.html#shallowref}
*/
-export function shallowRef<T extends object>(
- value: T
-): T extends Ref ? T : ShallowRef<T>
+export function shallowRef<T>(value: MaybeRef<T>): Ref<T> | ShallowRef<T>
+export function shallowRef<T extends Ref>(value: T): T
export function shallowRef<T>(value: T): ShallowRef<T>
export function shallowRef<T = any>(): ShallowRef<T | undefined>
export function shallowRef(value?: unknown) {