codediodeio / sveltefire

Cybernetically enhanced Firebase apps
MIT License
1.64k stars 126 forks source link

CollectionStore is perhaps typed incorrectly, cannot make any derived stores from them #153

Open ehahn9 opened 4 months ago

ehahn9 commented 4 months ago

I believe perhaps CollectionStore (and DocStore?) has the wrong unsubscriber type...

import { getFirestore } from 'firebase/firestore';
import { derived } from 'svelte/store';
import { collectionStore } from 'sveltefire';

interface Post {
  id: string;
  title: string;
  body: string;
}

const posts = collectionStore<Post>(getFirestore(), 'posts');
const postsCount = derived(posts, $posts => $posts.length);
//                         ^^^^^

// But with the cast, all is well...
const postsCount2 = derived(posts as Readable<Post[]>, $posts => $posts.length);
No overload matches this call.
  The last overload gave the following error.
    Argument of type 'CollectionStore<Post[]>' is not assignable to parameter of type 'Stores'.
      Type 'CollectionStore<Post[]>' is not assignable to type 'Readable<any>'.
        The types returned by 'subscribe(...)' are incompatible between these types.
          Type 'void | (() => void)' is not assignable to type 'Unsubscriber'.
            Type 'void' is not assignable to type 'Unsubscriber'.  ts(2769)