From 2baec1f4bd4914fc8125ba662760c1bdfab7d009 Mon Sep 17 00:00:00 2001 From: Corbin Crutchley Date: Sat, 30 Nov 2024 01:02:42 -0800 Subject: [PATCH] chore: fix issues with Solid store tests --- packages/angular-store/tests/test.test-d.ts | 2 +- packages/solid-store/src/index.tsx | 18 +++++++++++------- packages/solid-store/tests/test.test-d.ts | 20 ++++++++++++++++++++ 3 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 packages/solid-store/tests/test.test-d.ts diff --git a/packages/angular-store/tests/test.test-d.ts b/packages/angular-store/tests/test.test-d.ts index 0cc4256..414ae52 100644 --- a/packages/angular-store/tests/test.test-d.ts +++ b/packages/angular-store/tests/test.test-d.ts @@ -2,7 +2,7 @@ import { expectTypeOf, test } from 'vitest' import { Derived, Store, injectStore } from '../src' import type { Signal } from '@angular/core' -test('useStore works with derived state', () => { +test('injectStore works with derived state', () => { const store = new Store(12) const derived = new Derived({ deps: [store], diff --git a/packages/solid-store/src/index.tsx b/packages/solid-store/src/index.tsx index 7b82b73..3897e53 100644 --- a/packages/solid-store/src/index.tsx +++ b/packages/solid-store/src/index.tsx @@ -1,6 +1,6 @@ import { onCleanup } from 'solid-js' import { createStore, reconcile } from 'solid-js/store' -import type { AnyUpdater, Store } from '@tanstack/store' +import type { Derived, Store } from '@tanstack/store' import type { Accessor } from 'solid-js' export * from '@tanstack/store' @@ -10,12 +10,16 @@ export * from '@tanstack/store' */ export type NoInfer = [T][T extends any ? 0 : never] -export function useStore< - TState, - TSelected = NoInfer, - TUpdater extends AnyUpdater = AnyUpdater, ->( - store: Store, +export function useStore>( + store: Store, + selector?: (state: NoInfer) => TSelected, +): Accessor +export function useStore>( + store: Derived, + selector?: (state: NoInfer) => TSelected, +): Accessor +export function useStore>( + store: Store | Derived, selector: (state: NoInfer) => TSelected = (d) => d as any, ): Accessor { const [slice, setSlice] = createStore({ diff --git a/packages/solid-store/tests/test.test-d.ts b/packages/solid-store/tests/test.test-d.ts new file mode 100644 index 0000000..d02e4ab --- /dev/null +++ b/packages/solid-store/tests/test.test-d.ts @@ -0,0 +1,20 @@ +import { expectTypeOf, test } from 'vitest' +import { Derived, Store, useStore } from '../src' +import type { Accessor } from 'solid-js' + +test('useStore works with derived state', () => { + const store = new Store(12) + const derived = new Derived({ + deps: [store], + fn: () => { + return { val: store.state * 2 } + }, + }) + + const val = useStore(derived, (state) => { + expectTypeOf(state).toMatchTypeOf<{ val: number }>() + return state.val + }) + + expectTypeOf(val).toMatchTypeOf>() +})