// proxyRefs: `ShallowUnwrapRef`
const r2 = {
a: ref(1),
+ c: computed(() => 1),
+ u: undefined,
obj: {
k: ref('foo')
- }
+ },
+ union: Math.random() > 0 - 5 ? ref({ name: 'yo' }) : null
}
const p2 = proxyRefs(r2)
expectType<number>(p2.a)
+expectType<number>(p2.c)
+expectType<undefined>(p2.u)
expectType<Ref<string>>(p2.obj.k)
+expectType<{ name: string } | null>(p2.union)
// toRef and toRefs
{
export interface RefUnwrapBailTypes {}
export type ShallowUnwrapRef<T> = {
- [K in keyof T]: T[K] extends Ref<infer V>
- ? V // if `V` is `unknown` that means it does not extend `Ref` and is undefined
- : T[K] extends Ref<infer V> | undefined
- ? unknown extends V
- ? undefined
- : V | undefined
- : T[K]
+ [K in keyof T]: DistrubuteRef<T[K]>
}
+type DistrubuteRef<T> = T extends Ref<infer V> ? V : T
+
export type UnwrapRef<T> = T extends ShallowRef<infer V>
? V
: T extends Ref<infer V>