export interface RefUnwrapBailTypes {}
export type ShallowUnwrapRef<T> = {
- [K in keyof T]: T[K] extends Ref<infer V> ? V : T[K]
+ [K in keyof T]: T[K] extends Ref<infer V>
+ ? V
+ : T[K] extends Ref<infer V> | undefined // if `V` is `unknown` that means it does not extend `Ref` and is undefined
+ ? unknown extends V ? undefined : V | undefined
+ : T[K]
}
export type UnwrapRef<T> = T extends Ref<infer V>
setupC: {
a: ref(2)
},
+ setupD: undefined as Ref<number> | undefined,
setupProps: props
}
}
expectType<Number>(rawBindings.setupA)
expectType<Ref<Number>>(rawBindings.setupB)
expectType<Ref<Number>>(rawBindings.setupC.a)
- expectType<Number>(rawBindings.setupA)
+ expectType<Ref<Number> | undefined>(rawBindings.setupD)
// raw bindings props
expectType<ExpectedProps['a']>(rawBindings.setupProps.a)
expectType<Number>(setup.setupA)
expectType<Number>(setup.setupB)
expectType<Ref<Number>>(setup.setupC.a)
- expectType<Number>(setup.setupA)
+ expectType<number | undefined>(setup.setupD)
// raw bindings props
expectType<ExpectedProps['a']>(setup.setupProps.a)
// instance
const instance = new MyComponent()
expectType<number>(instance.setupA)
+ expectType<number | undefined>(instance.setupD)
// @ts-expect-error
instance.notExist
})