File tree 3 files changed +63
-8
lines changed
3 files changed +63
-8
lines changed Original file line number Diff line number Diff line change 1
1
{
2
2
"name" : " firelord" ,
3
- "version" : " 2.6.27 " ,
3
+ "version" : " 2.6.28 " ,
4
4
"description" : " 🔥 Write V9 like Firestore Admin code with extreme type safety." ,
5
5
"author" : " tylim" ,
6
6
"license" : " MIT" ,
Original file line number Diff line number Diff line change @@ -7,6 +7,35 @@ import { IsTrue, IsSame } from './utils'
7
7
import { ServerTimestamp } from './fieldValues'
8
8
9
9
describe ( 'test exact optional' , ( ) => {
10
+ it ( 'test discriminated union' , ( ) => {
11
+ IsTrue <
12
+ IsSame <
13
+ ExactOptional <
14
+ { a : { b : 0 ; d : 1 } | { b : 1 ; c : 2 } } ,
15
+ { a : { b : 0 ; d : 1 } } ,
16
+ false ,
17
+ false ,
18
+ true
19
+ > ,
20
+ {
21
+ a ?:
22
+ | { b ?: 0 ; d ?: 1 }
23
+ | HandleUnknownMember <
24
+ // TODO remove this extra type
25
+ {
26
+ b : 1
27
+ c : 2
28
+ } ,
29
+ {
30
+ b : 0
31
+ d : 1
32
+ }
33
+ >
34
+ }
35
+ >
36
+ > ( )
37
+ } )
38
+
10
39
it ( 'test union of primitive type with oject literal' , ( ) => {
11
40
IsTrue <
12
41
IsSame <
@@ -141,6 +170,30 @@ describe('test exact optional', () => {
141
170
} )
142
171
143
172
describe ( 'test RecursivelyReplaceDeleteFieldWithErrorMsg' , ( ) => {
173
+ it ( 'test discriminated union' , ( ) => {
174
+ IsTrue <
175
+ IsSame <
176
+ RecursivelyReplaceDeleteFieldWithErrorMsg <
177
+ { a : { b : 0 ; d : 1 } | { b : 1 ; c : 2 } } ,
178
+ { a : { b : 0 ; d : 1 } }
179
+ > ,
180
+ {
181
+ a :
182
+ | { b : 0 ; d : 1 }
183
+ | HandleUnknownMember <
184
+ {
185
+ b : 1
186
+ c : 2
187
+ } ,
188
+ {
189
+ b : 0
190
+ d : 1
191
+ }
192
+ >
193
+ }
194
+ >
195
+ > ( )
196
+ } )
144
197
it ( 'test union of primitive type with oject literal' , ( ) => {
145
198
IsTrue <
146
199
IsSame <
Original file line number Diff line number Diff line change @@ -67,13 +67,15 @@ export type ExactOptional<
67
67
Merge extends boolean | string [ ] , // this is for set merge operation only
68
68
NoFlatten extends boolean ,
69
69
TopLevel extends boolean
70
- > = Data extends (
71
- NoFlatten extends true
72
- ? TopLevel extends true
73
- ? Record < string , never >
74
- : never
75
- : Record < string , never >
76
- )
70
+ > = T extends never
71
+ ? T
72
+ : Data extends (
73
+ NoFlatten extends true
74
+ ? TopLevel extends true
75
+ ? Record < string , never >
76
+ : never
77
+ : Record < string , never >
78
+ )
77
79
? ErrorEmptyUpdate | T
78
80
: keyof Data extends ( string extends keyof T ? string | number : keyof T )
79
81
? {
You can’t perform that action at this time.
0 commit comments