Skip to content

Commit d4f4b02

Browse files
committed
fix discriminated union not working in update operation
1 parent ba72793 commit d4f4b02

File tree

3 files changed

+63
-8
lines changed

3 files changed

+63
-8
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "firelord",
3-
"version": "2.6.27",
3+
"version": "2.6.28",
44
"description": "🔥 Write V9 like Firestore Admin code with extreme type safety.",
55
"author": "tylim",
66
"license": "MIT",

src/types/exactOptional.test.ts

+53
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,35 @@ import { IsTrue, IsSame } from './utils'
77
import { ServerTimestamp } from './fieldValues'
88

99
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+
1039
it('test union of primitive type with oject literal', () => {
1140
IsTrue<
1241
IsSame<
@@ -141,6 +170,30 @@ describe('test exact optional', () => {
141170
})
142171

143172
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+
})
144197
it('test union of primitive type with oject literal', () => {
145198
IsTrue<
146199
IsSame<

src/types/exactOptional.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,15 @@ export type ExactOptional<
6767
Merge extends boolean | string[], // this is for set merge operation only
6868
NoFlatten extends boolean,
6969
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+
)
7779
? ErrorEmptyUpdate | T
7880
: keyof Data extends (string extends keyof T ? string | number : keyof T)
7981
? {

0 commit comments

Comments
 (0)