Skip to content

Commit 60055ea

Browse files
authored
Merge pull request #3833 from reduxjs/typescript-fix-createselector
2 parents 1e3d045 + d28e6f5 commit 60055ea

File tree

4 files changed

+17
-8
lines changed

4 files changed

+17
-8
lines changed

packages/toolkit/src/entities/state_selectors.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,14 @@ import type { CreateSelectorFunction, Selector, createSelector } from 'reselect'
22
import { createDraftSafeSelector } from '../createDraftSafeSelector'
33
import type { EntityState, EntitySelectors, EntityId } from './models'
44

5+
type AnyFunction = (...args: any) => any
6+
type AnyCreateSelectorFunction = CreateSelectorFunction<
7+
<F extends AnyFunction>(f: F) => F,
8+
<F extends AnyFunction>(f: F) => F
9+
>
10+
511
export interface GetSelectorsOptions {
6-
// TODO Review if this causes issues or if we can go back to using `CreateSelectorFunction`
7-
createSelector?: typeof createSelector
12+
createSelector?: AnyCreateSelectorFunction
813
}
914

1015
export function createSelectorsFactory<T, Id extends EntityId>() {
@@ -20,7 +25,8 @@ export function createSelectorsFactory<T, Id extends EntityId>() {
2025
selectState?: (state: V) => EntityState<T, Id>,
2126
options: GetSelectorsOptions = {}
2227
): EntitySelectors<T, any, Id> {
23-
const { createSelector = createDraftSafeSelector } = options
28+
const { createSelector = createDraftSafeSelector as AnyCreateSelectorFunction } = options
29+
2430
const selectIds = (state: EntityState<T, Id>) => state.ids
2531

2632
const selectEntities = (state: EntityState<T, Id>) => state.entities

packages/toolkit/src/entities/tests/sorted_state_adapter.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {
1111
import { createNextState } from '../..'
1212

1313
describe('Sorted State Adapter', () => {
14-
let adapter: EntityAdapter<string, BookModel>
15-
let state: EntityState<string, BookModel>
14+
let adapter: EntityAdapter<BookModel, string>
15+
let state: EntityState<BookModel, string>
1616

1717
beforeAll(() => {
1818
//eslint-disable-next-line
@@ -349,7 +349,7 @@ describe('Sorted State Adapter', () => {
349349
order: number
350350
ts: number
351351
}
352-
const sortedItemsAdapter = createEntityAdapter<string, OrderedEntity>({
352+
const sortedItemsAdapter = createEntityAdapter<OrderedEntity>({
353353
sortComparer: (a, b) => a.order - b.order,
354354
})
355355
const withInitialItems = sortedItemsAdapter.setAll(

packages/toolkit/src/entities/tests/state_adapter.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { createSlice } from '../../createSlice'
66
import type { BookModel } from './fixtures/book'
77

88
describe('createStateOperator', () => {
9-
let adapter: EntityAdapter<string, BookModel>
9+
let adapter: EntityAdapter<BookModel, string>
1010

1111
beforeEach(() => {
1212
adapter = createEntityAdapter({

packages/toolkit/src/entities/tests/state_selectors.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,10 @@ describe('Entity State Selectors', () => {
130130
})
131131
describe('custom createSelector instance', () => {
132132
it('should use the custom createSelector function if provided', () => {
133-
const memoizeSpy = vi.fn(weakMapMemoize)
133+
const memoizeSpy = vi.fn(
134+
// test that we're allowed to pass memoizers with different options, as long as they're optional
135+
<F extends (...args: any[]) => any>(fn: F, param?: boolean) => fn
136+
)
134137
const createCustomSelector = createDraftSafeSelectorCreator(memoizeSpy)
135138

136139
const adapter = createEntityAdapter({

0 commit comments

Comments
 (0)