Merge 8ad2053b5b
into 5f8314cb7f
This commit is contained in:
commit
5f2c701963
|
@ -236,6 +236,38 @@ describe('Type safety for `WritableComputedRef` and `ComputedRef`', () => {
|
|||
expectType<ComputedRef<string>>(immutableComputed)
|
||||
})
|
||||
|
||||
declare class Foo {
|
||||
private _: unknown
|
||||
}
|
||||
|
||||
describe('omit the initial value and specify a generic w/ `Ref` type', <T>() => {
|
||||
const a = ref<{ foo: Ref<number> }>()
|
||||
expectType<{ foo: number } | undefined>(a.value)
|
||||
expectType<number>(a.value!.foo)
|
||||
a.value = undefined
|
||||
a.value = { foo: ref(1) }
|
||||
a.value!.foo = 2
|
||||
// @ts-expect-error
|
||||
a.value.foo.value = 2
|
||||
|
||||
const b = ref<Ref<number>>()
|
||||
expectType<Ref<number> | undefined>(b.value)
|
||||
expectType<number>(b.value!.value)
|
||||
b.value = undefined
|
||||
b.value = ref(1)
|
||||
b.value!.value = 1
|
||||
|
||||
const c = ref<T>()
|
||||
c.value = undefined
|
||||
c.value = {} as T
|
||||
|
||||
// case from vueuse
|
||||
const d = ref<Foo>()
|
||||
expectType<Ref<Foo | undefined>>(d)
|
||||
d.value = new Foo()
|
||||
expectType<Foo | undefined>(d.value)
|
||||
})
|
||||
|
||||
// shallowRef
|
||||
type Status = 'initial' | 'ready' | 'invalidating'
|
||||
const shallowStatus = shallowRef<Status>('initial')
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import {
|
||||
type IfAny,
|
||||
type PublicOf,
|
||||
hasChanged,
|
||||
isArray,
|
||||
isFunction,
|
||||
|
@ -55,7 +56,13 @@ export function isRef(r: any): r is Ref {
|
|||
export function ref<T>(
|
||||
value: T,
|
||||
): [T] extends [Ref] ? IfAny<T, Ref<T>, T> : Ref<UnwrapRef<T>, UnwrapRef<T> | T>
|
||||
export function ref<T = any>(): Ref<T | undefined>
|
||||
|
||||
export function ref<T = any>(): [T] extends [Ref]
|
||||
? Ref<T | undefined>
|
||||
: PublicOf<T> extends T
|
||||
? Ref<UnwrapRef<T> | undefined, UnwrapRef<T> | T | undefined>
|
||||
: Ref<T | undefined>
|
||||
|
||||
export function ref(value?: unknown) {
|
||||
return createRef(value, false)
|
||||
}
|
||||
|
|
|
@ -27,6 +27,13 @@ export type OverloadParameters<T extends (...args: any[]) => any> = Parameters<
|
|||
OverloadUnion<T>
|
||||
>
|
||||
|
||||
/**
|
||||
* Utility for strip out `private` / `protected` fields
|
||||
*/
|
||||
export type PublicOf<T> = {
|
||||
[P in keyof T]: T[P]
|
||||
}
|
||||
|
||||
type OverloadProps<TOverload> = Pick<TOverload, keyof TOverload>
|
||||
|
||||
type OverloadUnionRecursive<
|
||||
|
|
Loading…
Reference in New Issue