diff --git a/src/middleware/devtools.ts b/src/middleware/devtools.ts index a88265528a..cbbe6832aa 100644 --- a/src/middleware/devtools.ts +++ b/src/middleware/devtools.ts @@ -96,7 +96,7 @@ type Devtools = < >( initializer: StateCreator, devtoolsOptions?: DevtoolsOptions, -) => StateCreator +) => StateCreator type DevtoolsImpl = ( storeInitializer: StateCreator, diff --git a/tests/middlewareTypes.test.tsx b/tests/middlewareTypes.test.tsx index ec941ffae5..e0add0f71c 100644 --- a/tests/middlewareTypes.test.tsx +++ b/tests/middlewareTypes.test.tsx @@ -198,6 +198,28 @@ describe('counter state spec (single middleware)', () => { expect(useStoreD).toBeDefined() }) + it('devtools #3510', () => { + type MyState = { + count: number + inc: () => void + } + + const useBoundStore = create()( + devtools((set, get) => ({ + count: 0, + inc: () => { + set({ count: get().count + 1 }, false, 'inc') + // @ts-expect-error `get` should be inferred as `MyState`. + void get().foo + // @ts-expect-error `set` should enforce `count` as number. + set({ count: '1' }) + }, + })), + ) + + expect(useBoundStore).toBeDefined() + }) + it('subscribeWithSelector', () => { const useBoundStore = create()( subscribeWithSelector((set, get) => ({