diff --git a/.eslintrc.json b/.eslintrc.json index 769cc18a..bcee5bb1 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -47,7 +47,6 @@ "@typescript-eslint/no-use-before-define": "off", "@typescript-eslint/no-empty-function": "off", "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/consistent-type-definitions": ["error", "interface"], "jest/consistent-test-it": [ "error", { "fn": "it", "withinDescribe": "it" } diff --git a/src/context.ts b/src/context.ts index 4d499dcb..44d0645c 100644 --- a/src/context.ts +++ b/src/context.ts @@ -14,7 +14,7 @@ import { useStore, } from 'zustand' -interface UseContextStore> { +type UseContextStore> = { (): ExtractState ( selector: StateSelector, U>, diff --git a/src/middleware/devtools.ts b/src/middleware/devtools.ts index 9675009b..e5622c31 100644 --- a/src/middleware/devtools.ts +++ b/src/middleware/devtools.ts @@ -16,7 +16,7 @@ declare module '../vanilla' { } // FIXME https://github.com/reduxjs/redux-devtools/issues/1097 -interface Message { +type Message = { type: string payload?: any state?: any @@ -56,7 +56,7 @@ type StoreDevtools = S extends { } : never -interface DevtoolsOptions { +export interface DevtoolsOptions { enabled?: boolean anonymousActionType?: string name?: string diff --git a/src/middleware/persist.ts b/src/middleware/persist.ts index d81e629c..77c3afab 100644 --- a/src/middleware/persist.ts +++ b/src/middleware/persist.ts @@ -11,7 +11,7 @@ export interface StateStorage { removeItem: (name: string) => void | Promise } -interface StorageValue { +type StorageValue = { state: S version?: number } @@ -77,7 +77,7 @@ export interface PersistOptions { type PersistListener = (state: S) => void -interface StorePersist { +type StorePersist = { persist: { setOptions: (options: Partial>) => void clearStorage: () => void @@ -89,7 +89,7 @@ interface StorePersist { } } -interface Thenable { +type Thenable = { then( onFulfilled: (value: Value) => V | Promise | Thenable ): Thenable diff --git a/src/middleware/redux.ts b/src/middleware/redux.ts index 8bffda98..aece77ee 100644 --- a/src/middleware/redux.ts +++ b/src/middleware/redux.ts @@ -4,15 +4,15 @@ import { NamedSet } from './devtools' type Write = Omit & U type Cast = T extends U ? T : U -interface Action { +type Action = { type: unknown } -interface ReduxState { +type ReduxState = { dispatch: StoreRedux['dispatch'] } -interface StoreRedux { +type StoreRedux = { dispatch: (a: A) => A dispatchFromDevtools: true } diff --git a/src/middleware/subscribeWithSelector.ts b/src/middleware/subscribeWithSelector.ts index 70ba7052..a91e5273 100644 --- a/src/middleware/subscribeWithSelector.ts +++ b/src/middleware/subscribeWithSelector.ts @@ -32,7 +32,7 @@ declare module '../vanilla' { } } -interface StoreSubscribeWithSelector { +type StoreSubscribeWithSelector = { subscribe: { (listener: (selectedState: T, previousSelectedState: T) => void): () => void ( diff --git a/src/react.ts b/src/react.ts index 107d7ff8..b05b22f7 100644 --- a/src/react.ts +++ b/src/react.ts @@ -56,7 +56,7 @@ export type UseBoundStore>> = { ): U } & S -interface Create { +type Create = { ( initializer: StateCreator ): UseBoundStore, Mos>> diff --git a/src/vanilla.ts b/src/vanilla.ts index bcfd2c66..999460f1 100644 --- a/src/vanilla.ts +++ b/src/vanilla.ts @@ -30,7 +30,7 @@ export type StateSliceListener = (slice: T, previousSlice: T) => void /** * @deprecated Use `(listener: (state: T) => void) => void` instead of `Subscribe`. */ -export interface Subscribe { +export type Subscribe = { (listener: (state: T, previousState: T) => void): () => void } @@ -87,7 +87,7 @@ export type Mutate = Ms extends [] type Get = K extends keyof T ? T[K] : F -interface CreateStore { +type CreateStore = { ( initializer: StateCreator ): Mutate, Mos> diff --git a/tests/basic.test.tsx b/tests/basic.test.tsx index 2290b16b..484786c1 100644 --- a/tests/basic.test.tsx +++ b/tests/basic.test.tsx @@ -37,7 +37,7 @@ it('creates a store hook and api object', () => { `) }) -interface CounterState { +type CounterState = { count: number inc: () => void } @@ -185,13 +185,8 @@ it('can batch updates', async () => { }) it('can update the selector', async () => { - interface State { - one: string - two: string - } - interface Props { - selector: StateSelector - } + type State = { one: string; two: string } + type Props = { selector: StateSelector } const useStore = create(() => ({ one: 'one', two: 'two', @@ -209,12 +204,8 @@ it('can update the selector', async () => { }) it('can update the equality checker', async () => { - interface State { - value: number - } - interface Props { - equalityFn: EqualityChecker - } + type State = { value: number } + type Props = { equalityFn: EqualityChecker } const useStore = create(() => ({ value: 0 })) const { setState } = useStore const selector: StateSelector = (s) => s @@ -247,10 +238,8 @@ it('can update the equality checker', async () => { }) it('can call useStore with progressively more arguments', async () => { - interface State { - value: number - } - interface Props { + type State = { value: number } + type Props = { selector?: StateSelector equalityFn?: EqualityChecker } @@ -294,9 +283,7 @@ it('can call useStore with progressively more arguments', async () => { it('can throw an error in selector', async () => { console.error = jest.fn() - interface State { - value: string | number - } + type State = { value: string | number } const initialState: State = { value: 'foo' } const useStore = create(() => initialState) @@ -341,9 +328,7 @@ it('can throw an error in selector', async () => { it('can throw an error in equality checker', async () => { console.error = jest.fn() - interface State { - value: string | number - } + type State = { value: string | number } const initialState: State = { value: 'foo' } const useStore = create(() => initialState) @@ -388,7 +373,7 @@ it('can throw an error in equality checker', async () => { }) it('can get the store', () => { - interface State { + type State = { value: number getState1: () => State getState2: () => State @@ -404,7 +389,7 @@ it('can get the store', () => { }) it('can set the store', () => { - interface State { + type State = { value: number setState1: SetState setState2: SetState @@ -453,10 +438,7 @@ it('can destroy the store', () => { }) it('only calls selectors when necessary', async () => { - interface State { - a: number - b: number - } + type State = { a: number; b: number } const useStore = create(() => ({ a: 0, b: 0 })) const { setState } = useStore let inlineSelectorCallCount = 0 @@ -492,12 +474,10 @@ it('only calls selectors when necessary', async () => { }) it('ensures parent components subscribe before children', async () => { - interface State { + type State = { children: { [key: string]: { text: string } } } - interface Props { - id: string - } + type Props = { id: string } const useStore = create(() => ({ children: { '1': { text: 'child 1' }, diff --git a/tests/context.test.tsx b/tests/context.test.tsx index bbaa2a73..ff2f0afb 100644 --- a/tests/context.test.tsx +++ b/tests/context.test.tsx @@ -15,7 +15,7 @@ afterEach(() => { console.error = consoleError }) -interface CounterState { +type CounterState = { count: number inc: () => void } diff --git a/tests/middlewareTypes.test.tsx b/tests/middlewareTypes.test.tsx index 3c891e75..4ecdf08f 100644 --- a/tests/middlewareTypes.test.tsx +++ b/tests/middlewareTypes.test.tsx @@ -9,7 +9,7 @@ import { import { immer } from 'zustand/middleware/immer' import createVanilla from 'zustand/vanilla' -interface CounterState { +type CounterState = { count: number inc: () => void } @@ -597,7 +597,7 @@ describe('more complex state spec with subscribeWithSelector', () => { }) it('#631', () => { - interface MyState { + type MyState = { foo: number | null } const useStore = create()( @@ -622,7 +622,7 @@ describe('more complex state spec with subscribeWithSelector', () => { }) it('#650', () => { - interface MyState { + type MyState = { token: string | undefined authenticated: boolean authenticate: (username: string, password: string) => Promise diff --git a/tests/types.test.tsx b/tests/types.test.tsx index 7f7f6cee..09bafaca 100644 --- a/tests/types.test.tsx +++ b/tests/types.test.tsx @@ -14,7 +14,7 @@ import create, { } from 'zustand' it('can use exposed types', () => { - interface ExampleState { + type ExampleState = { num: number numGet: () => number numGetState: () => number @@ -111,9 +111,7 @@ type AssertEqual = Type extends Expected : never it('should have correct (partial) types for setState', () => { - interface Count { - count: number - } + type Count = { count: number } const store = create((set) => ({ count: 0, @@ -139,7 +137,7 @@ it('should have correct (partial) types for setState', () => { }) it('should allow for different partial keys to be returnable from setState', () => { - interface State { + type State = { count: number something: string }