types(reactivity): handle primitive + object intersection types in UnwrapRef (#614)

This commit is contained in:
IU
2020-01-17 06:47:47 +08:00
committed by Evan You
parent 2f6ec45d10
commit 2b4d0d6501
2 changed files with 12 additions and 1 deletions

View File

@@ -85,6 +85,11 @@ function toProxyRef<T extends object, K extends keyof T>(
type UnwrapArray<T> = { [P in keyof T]: UnwrapRef<T[P]> }
// corner case when use narrows type
// Ex. type RelativePath = string & { __brand: unknown }
// RelativePath extends object -> true
type BaseTypes = string | number | boolean
// Recursively unwraps nested value bindings.
export type UnwrapRef<T> = {
cRef: T extends ComputedRef<infer V> ? UnwrapRef<V> : T
@@ -97,6 +102,6 @@ export type UnwrapRef<T> = {
? 'ref'
: T extends Array<any>
? 'array'
: T extends Function | CollectionTypes
: T extends Function | CollectionTypes | BaseTypes
? 'ref' // bail out on types that shouldn't be unwrapped
: T extends object ? 'object' : 'ref']