@@ -6,6 +6,11 @@ import { reactive } from './reactive';
66
77type BailTypes = Function | Map < any , any > | Set < any > | WeakMap < any , any > | WeakSet < any > ;
88
9+ // corner case when use narrows type
10+ // Ex. type RelativePath = string & { __brand: unknown }
11+ // RelativePath extends object -> true
12+ type BaseTypes = string | number | boolean ;
13+
914export interface Ref < T > {
1015 value : T ;
1116}
@@ -16,63 +21,63 @@ export interface Ref<T> {
1621// practical use cases...
1722export type UnwrapRef < T > = T extends Ref < infer V >
1823 ? UnwrapRef2 < V >
19- : T extends BailTypes
24+ : T extends BailTypes | BaseTypes
2025 ? T // bail out on types that shouldn't be unwrapped
2126 : T extends object ? { [ K in keyof T ] : UnwrapRef2 < T [ K ] > } : T
2227
2328// prettier-ignore
2429type UnwrapRef2 < T > = T extends Ref < infer V >
2530 ? UnwrapRef3 < V >
26- : T extends BailTypes
31+ : T extends BailTypes | BaseTypes
2732 ? T
2833 : T extends object ? { [ K in keyof T ] : UnwrapRef3 < T [ K ] > } : T
2934
3035// prettier-ignore
3136type UnwrapRef3 < T > = T extends Ref < infer V >
3237 ? UnwrapRef4 < V >
33- : T extends BailTypes
38+ : T extends BailTypes | BaseTypes
3439 ? T
3540 : T extends object ? { [ K in keyof T ] : UnwrapRef4 < T [ K ] > } : T
3641
3742// prettier-ignore
3843type UnwrapRef4 < T > = T extends Ref < infer V >
3944 ? UnwrapRef5 < V >
40- : T extends BailTypes
45+ : T extends BailTypes | BaseTypes
4146 ? T
4247 : T extends object ? { [ K in keyof T ] : UnwrapRef5 < T [ K ] > } : T
4348
4449// prettier-ignore
4550type UnwrapRef5 < T > = T extends Ref < infer V >
4651 ? UnwrapRef6 < V >
47- : T extends BailTypes
52+ : T extends BailTypes | BaseTypes
4853 ? T
4954 : T extends object ? { [ K in keyof T ] : UnwrapRef6 < T [ K ] > } : T
5055
5156// prettier-ignore
5257type UnwrapRef6 < T > = T extends Ref < infer V >
5358 ? UnwrapRef7 < V >
54- : T extends BailTypes
59+ : T extends BailTypes | BaseTypes
5560 ? T
5661 : T extends object ? { [ K in keyof T ] : UnwrapRef7 < T [ K ] > } : T
5762
5863// prettier-ignore
5964type UnwrapRef7 < T > = T extends Ref < infer V >
6065 ? UnwrapRef8 < V >
61- : T extends BailTypes
66+ : T extends BailTypes | BaseTypes
6267 ? T
6368 : T extends object ? { [ K in keyof T ] : UnwrapRef8 < T [ K ] > } : T
6469
6570// prettier-ignore
6671type UnwrapRef8 < T > = T extends Ref < infer V >
6772 ? UnwrapRef9 < V >
68- : T extends BailTypes
73+ : T extends BailTypes | BaseTypes
6974 ? T
7075 : T extends object ? { [ K in keyof T ] : UnwrapRef9 < T [ K ] > } : T
7176
7277// prettier-ignore
7378type UnwrapRef9 < T > = T extends Ref < infer V >
7479 ? UnwrapRef10 < V >
75- : T extends BailTypes
80+ : T extends BailTypes | BaseTypes
7681 ? T
7782 : T extends object ? { [ K in keyof T ] : UnwrapRef10 < T [ K ] > } : T
7883
0 commit comments