File tree 2 files changed +32
-16
lines changed 2 files changed +32
-16
lines changed Original file line number Diff line number Diff line change @@ -97,9 +97,13 @@ export namespace util {
97
97
}
98
98
99
99
export namespace objectUtil {
100
- export type MergeShapes < U , V > = {
101
- [ k in Exclude < keyof U , keyof V > ] : U [ k ] ;
102
- } & V ;
100
+ export type MergeShapes < U , V > =
101
+ // fast path when there is no keys overlap
102
+ keyof U & keyof V extends never
103
+ ? U & V
104
+ : {
105
+ [ k in Exclude < keyof U , keyof V > ] : U [ k ] ;
106
+ } & V ;
103
107
104
108
type optionalKeys < T extends object > = {
105
109
[ k in keyof T ] : undefined extends T [ k ] ? k : never ;
@@ -131,11 +135,15 @@ export namespace objectUtil {
131
135
} ;
132
136
} ;
133
137
134
- export type extendShape < A extends object , B extends object > = {
135
- [ K in keyof A as K extends keyof B ? never : K ] : A [ K ] ;
136
- } & {
137
- [ K in keyof B ] : B [ K ] ;
138
- } ;
138
+ export type extendShape < A extends object , B extends object > =
139
+ // fast path when there is no keys overlap
140
+ keyof A & keyof B extends never
141
+ ? A & B
142
+ : {
143
+ [ K in keyof A as K extends keyof B ? never : K ] : A [ K ] ;
144
+ } & {
145
+ [ K in keyof B ] : B [ K ] ;
146
+ } ;
139
147
}
140
148
141
149
export const ZodParsedType = util . arrayToEnum ( [
Original file line number Diff line number Diff line change @@ -97,9 +97,13 @@ export namespace util {
97
97
}
98
98
99
99
export namespace objectUtil {
100
- export type MergeShapes < U , V > = {
101
- [ k in Exclude < keyof U , keyof V > ] : U [ k ] ;
102
- } & V ;
100
+ export type MergeShapes < U , V > =
101
+ // fast path when there is no keys overlap
102
+ keyof U & keyof V extends never
103
+ ? U & V
104
+ : {
105
+ [ k in Exclude < keyof U , keyof V > ] : U [ k ] ;
106
+ } & V ;
103
107
104
108
type optionalKeys < T extends object > = {
105
109
[ k in keyof T ] : undefined extends T [ k ] ? k : never ;
@@ -131,11 +135,15 @@ export namespace objectUtil {
131
135
} ;
132
136
} ;
133
137
134
- export type extendShape < A extends object , B extends object > = {
135
- [ K in keyof A as K extends keyof B ? never : K ] : A [ K ] ;
136
- } & {
137
- [ K in keyof B ] : B [ K ] ;
138
- } ;
138
+ export type extendShape < A extends object , B extends object > =
139
+ // fast path when there is no keys overlap
140
+ keyof A & keyof B extends never
141
+ ? A & B
142
+ : {
143
+ [ K in keyof A as K extends keyof B ? never : K ] : A [ K ] ;
144
+ } & {
145
+ [ K in keyof B ] : B [ K ] ;
146
+ } ;
139
147
}
140
148
141
149
export const ZodParsedType = util . arrayToEnum ( [
You can’t perform that action at this time.
0 commit comments