8
8
} from 'firebase/firestore'
9
9
import { expectType , setupFirestoreRefs , tds , firestore } from '../utils'
10
10
import { nextTick , ref , shallowRef , unref , type Ref } from 'vue'
11
- import { _MaybeRef } from '../../src/shared'
11
+ import { _MaybeRef , _Nullable } from '../../src/shared'
12
12
import {
13
13
useDocument ,
14
14
VueFirestoreDocumentData ,
@@ -243,14 +243,17 @@ describe(
243
243
finished : boolean
244
244
}
245
245
246
- expectType < Ref < DocumentData | null > > ( useDocument ( itemRef ) )
246
+ expectType < Ref < DocumentData | null | undefined > > ( useDocument ( itemRef ) )
247
247
// @ts -expect-error
248
248
expectType < Ref < number | null > > ( useDocument ( itemRef ) )
249
249
250
250
// Adds the id
251
251
// FIXME: this one is any but the test passes
252
- expectType < string > ( useDocument ( doc ( db , 'todos' , '1' ) ) . value . id )
252
+ expectType < string > ( useDocument ( doc ( db , 'todos' , '1' ) ) . value ? .id )
253
253
expectType < string > ( useDocument < TodoI > ( doc ( db , 'todos' , '1' ) ) . value ! . id )
254
+ expectType < _Nullable < TodoI > > (
255
+ useDocument < TodoI > ( doc ( db , 'todos' , '1' ) ) . value
256
+ )
254
257
expectType < string > ( useDocument < unknown > ( doc ( db , 'todos' , '1' ) ) . value ! . id )
255
258
useDocument (
256
259
doc ( db , 'todos' ) . withConverter < TodoI > ( {
@@ -261,28 +264,36 @@ describe(
261
264
toFirestore : ( todo ) => todo ,
262
265
} )
263
266
// @ts -expect-error: no id with custom converter
264
- ) . value . id
267
+ ) . value ? .id
265
268
266
- expectType < Ref < number | null > > ( useDocument < number > ( itemRef ) )
267
- expectType < Ref < number | null > > ( useDocument < number > ( itemRef ) . data )
269
+ expectType < Ref < number | null | undefined > > ( useDocument < number > ( itemRef ) )
270
+ expectType < Ref < number | null | undefined > > (
271
+ useDocument < number > ( itemRef ) . data
272
+ )
268
273
// @ts -expect-error
269
274
expectType < Ref < string | null > > ( useDocument < number > ( itemRef ) )
270
275
271
276
const refWithConverter = itemRef . withConverter < number > ( {
272
277
toFirestore : ( data ) => ( { n : data } ) ,
273
278
fromFirestore : ( snap , options ) => snap . data ( options ) . n as number ,
274
279
} )
275
- expectType < Ref < number > > ( useDocument ( refWithConverter ) )
276
- expectType < Ref < number > > ( useDocument ( refWithConverter ) . data )
280
+ expectType < Ref < number | number | undefined > > (
281
+ useDocument ( refWithConverter )
282
+ )
283
+ expectType < Ref < number | number | undefined > > (
284
+ useDocument ( refWithConverter ) . data
285
+ )
277
286
// should not be null
278
- useDocument ( refWithConverter ) . value . toFixed ( 14 )
287
+ useDocument ( refWithConverter ) . value ? .toFixed ( 14 )
279
288
// @ts -expect-error: string is not assignable to number
280
289
expectType < Ref < string > > ( useDocument ( refWithConverter ) )
281
290
// @ts -expect-error: no id when a custom converter is used
282
291
useDocument ( refWithConverter ) . value . id
283
292
284
293
// destructuring
285
- expectType < Ref < DocumentData | null > > ( useDocument ( itemRef ) . data )
294
+ expectType < Ref < DocumentData | null | undefined > > (
295
+ useDocument ( itemRef ) . data
296
+ )
286
297
expectType < Ref < FirestoreError | undefined > > ( useDocument ( itemRef ) . error )
287
298
expectType < Ref < boolean > > ( useDocument ( itemRef ) . pending )
288
299
} )
0 commit comments