Skip to content

Commit 65d66dc

Browse files
author
Lenz Weber
committed
remove any where applicable
1 parent 191e22e commit 65d66dc

File tree

6 files changed

+79
-118
lines changed

6 files changed

+79
-118
lines changed

src/createAction.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -296,11 +296,18 @@ export function createAction(type: string, prepareAction?: Function): any {
296296
return actionCreator
297297
}
298298

299-
export function isFSA<
300-
Payload = undefined,
301-
Type extends string = string,
302-
Meta = undefined
303-
>(action: any): action is PayloadAction<Payload, Type, Meta> {
299+
/**
300+
* The previous typings implied some assertion for the types of Payload/Error/Meta, which was just not the case.
301+
* I'd suggest we just do something like this - assert the shape of a FSA, but make no assumptions about the contents.
302+
*/
303+
export function isFSA(
304+
action: unknown
305+
): action is {
306+
type: string
307+
payload?: unknown
308+
error?: unknown
309+
meta?: unknown
310+
} {
304311
return (
305312
isPlainObject(action) &&
306313
typeof (action as any).type === 'string' &&

src/entities/models.ts

Lines changed: 16 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@ export interface DictionaryNum<T> {
2424

2525
/**
2626
* @alpha
27+
* why was this a class, not an interface?
2728
*/
2829
export abstract class Dictionary<T> implements DictionaryNum<T> {
29-
[id: string]: T | undefined
30+
// I get why you're adding "undefined" here, but there is not one check for it actually not being undefined down the line
31+
// on the contrary, some casts to `any` were necessary because `Object.entities(dictionary).sort()` were not possible any more
32+
// due to the `sort` assuming parameters of T.
33+
[id: string]: T
3034
}
3135

3236
/**
@@ -39,11 +43,6 @@ export type Update<T> = { id: EntityId; changes: Partial<T> }
3943
*/
4044
export type EntityMap<T> = (entity: T) => T
4145

42-
/**
43-
* @alpha
44-
*/
45-
export type TypeOrPayloadAction<T> = T | PayloadAction<T>
46-
4746
/**
4847
* @alpha
4948
*/
@@ -58,71 +57,48 @@ export interface EntityDefinition<T> {
5857
}
5958

6059
export interface EntityStateAdapter<T> {
61-
addOne<S extends EntityState<T>>(state: S, entity: TypeOrPayloadAction<T>): S
60+
addOne<S extends EntityState<T>>(state: S, entity: T): S
6261
addOne<S extends EntityState<T>>(state: S, action: PayloadAction<T>): S
6362

64-
addMany<S extends EntityState<T>>(
65-
state: S,
66-
entities: TypeOrPayloadAction<T[]>
67-
): S
63+
addMany<S extends EntityState<T>>(state: S, entities: T[]): S
6864
addMany<S extends EntityState<T>>(state: S, entities: PayloadAction<T[]>): S
6965

70-
setAll<S extends EntityState<T>>(
71-
state: S,
72-
entities: TypeOrPayloadAction<T[]>
73-
): S
66+
setAll<S extends EntityState<T>>(state: S, entities: T[]): S
7467
setAll<S extends EntityState<T>>(state: S, entities: PayloadAction<T[]>): S
7568

76-
removeOne<S extends EntityState<T>>(
77-
state: S,
78-
key: TypeOrPayloadAction<EntityId>
79-
): S
69+
removeOne<S extends EntityState<T>>(state: S, key: EntityId): S
8070
removeOne<S extends EntityState<T>>(state: S, key: PayloadAction<EntityId>): S
8171

72+
removeMany<S extends EntityState<T>>(state: S, keys: EntityId[]): S
8273
removeMany<S extends EntityState<T>>(
8374
state: S,
84-
keys: TypeOrPayloadAction<EntityId[]>
75+
keys: PayloadAction<EntityId[]>
8576
): S
8677

8778
removeAll<S extends EntityState<T>>(state: S): S
8879

89-
updateOne<S extends EntityState<T>>(
90-
state: S,
91-
update: TypeOrPayloadAction<Update<T>>
92-
): S
80+
updateOne<S extends EntityState<T>>(state: S, update: Update<T>): S
9381
updateOne<S extends EntityState<T>>(
9482
state: S,
9583
update: PayloadAction<Update<T>>
9684
): S
9785

98-
updateMany<S extends EntityState<T>>(
99-
state: S,
100-
updates: TypeOrPayloadAction<Update<T>[]>
101-
): S
86+
updateMany<S extends EntityState<T>>(state: S, updates: Update<T>[]): S
10287
updateMany<S extends EntityState<T>>(
10388
state: S,
10489
updates: PayloadAction<Update<T>[]>
10590
): S
10691

107-
upsertOne<S extends EntityState<T>>(
108-
state: S,
109-
entity: TypeOrPayloadAction<T>
110-
): S
92+
upsertOne<S extends EntityState<T>>(state: S, entity: T): S
11193
upsertOne<S extends EntityState<T>>(state: S, entity: PayloadAction<T>): S
11294

113-
upsertMany<S extends EntityState<T>>(
114-
state: S,
115-
entities: TypeOrPayloadAction<T[]>
116-
): S
95+
upsertMany<S extends EntityState<T>>(state: S, entities: T[]): S
11796
upsertMany<S extends EntityState<T>>(
11897
state: S,
11998
entities: PayloadAction<T[]>
12099
): S
121100

122-
map<S extends EntityState<T>>(
123-
state: S,
124-
map: TypeOrPayloadAction<EntityMap<T>>
125-
): S
101+
map<S extends EntityState<T>>(state: S, map: EntityMap<T>): S
126102
map<S extends EntityState<T>>(state: S, map: PayloadAction<EntityMap<T>>): S
127103
}
128104

src/entities/sorted_state_adapter.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { EntityStateAdapter, EntityState, Update } from './models'
1+
import { EntityStateAdapter, EntityState } from './models'
22
import { createEntityAdapter } from './create_adapter'
33
import { createAction } from '../createAction'
44
import {

src/entities/sorted_state_adapter.ts

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import {
44
Comparer,
55
EntityStateAdapter,
66
Update,
7-
EntityMap
7+
EntityMap,
8+
EntityId
89
} from './models'
910
import { createStateOperator } from './state_adapter'
1011
import { createUnsortedStateAdapter } from './unsorted_state_adapter'
@@ -13,21 +14,18 @@ import { selectIdValue } from './utils'
1314
export function createSortedStateAdapter<T>(
1415
selectId: IdSelector<T>,
1516
sort: Comparer<T>
16-
): EntityStateAdapter<T>
17-
export function createSortedStateAdapter<T>(selectId: any, sort: any): any {
17+
): EntityStateAdapter<T> {
1818
type R = EntityState<T>
1919

2020
const { removeOne, removeMany, removeAll } = createUnsortedStateAdapter(
2121
selectId
2222
)
2323

24-
function addOneMutably(entity: T, state: R): void
25-
function addOneMutably(entity: any, state: any): void {
24+
function addOneMutably(entity: T, state: R): void {
2625
return addManyMutably([entity], state)
2726
}
2827

29-
function addManyMutably(newModels: T[], state: R): void
30-
function addManyMutably(newModels: any[], state: any): void {
28+
function addManyMutably(newModels: T[], state: R): void {
3129
const models = newModels.filter(
3230
model => !(selectIdValue(model, selectId) in state.entities)
3331
)
@@ -37,21 +35,18 @@ export function createSortedStateAdapter<T>(selectId: any, sort: any): any {
3735
}
3836
}
3937

40-
function setAllMutably(models: T[], state: R): void
41-
function setAllMutably(models: any[], state: any): void {
38+
function setAllMutably(models: T[], state: R): void {
4239
state.entities = {}
4340
state.ids = []
4441

4542
addManyMutably(models, state)
4643
}
4744

48-
function updateOneMutably(update: Update<T>, state: R): void
49-
function updateOneMutably(update: any, state: any): void {
45+
function updateOneMutably(update: Update<T>, state: R): void {
5046
return updateManyMutably([update], state)
5147
}
5248

53-
function takeUpdatedModel(models: T[], update: Update<T>, state: R): boolean
54-
function takeUpdatedModel(models: any[], update: any, state: any): boolean {
49+
function takeUpdatedModel(models: T[], update: Update<T>, state: R): boolean {
5550
if (!(update.id in state.entities)) {
5651
return false
5752
}
@@ -67,8 +62,7 @@ export function createSortedStateAdapter<T>(selectId: any, sort: any): any {
6762
return newKey !== update.id
6863
}
6964

70-
function updateManyMutably(updates: Update<T>[], state: R): void
71-
function updateManyMutably(updates: any[], state: any): void {
65+
function updateManyMutably(updates: Update<T>[], state: R): void {
7266
const models: T[] = []
7367

7468
updates.forEach(update => takeUpdatedModel(models, update, state))
@@ -78,11 +72,10 @@ export function createSortedStateAdapter<T>(selectId: any, sort: any): any {
7872
}
7973
}
8074

81-
function mapMutably(map: EntityMap<T>, state: R): void
82-
function mapMutably(updatesOrMap: any, state: any): void {
75+
function mapMutably(updatesOrMap: EntityMap<T>, state: R): void {
8376
const updates: Update<T>[] = state.ids.reduce(
84-
(changes: any[], id: string | number) => {
85-
const change = updatesOrMap(state.entities[id])
77+
(changes: Update<T>[], id: EntityId) => {
78+
const change = updatesOrMap(state.entities[id]!)
8679
if (change !== state.entities[id]) {
8780
changes.push({ id, changes: change })
8881
}
@@ -94,15 +87,13 @@ export function createSortedStateAdapter<T>(selectId: any, sort: any): any {
9487
updateManyMutably(updates, state)
9588
}
9689

97-
function upsertOneMutably(entity: T, state: R): void
98-
function upsertOneMutably(entity: any, state: any): void {
90+
function upsertOneMutably(entity: T, state: R): void {
9991
return upsertManyMutably([entity], state)
10092
}
10193

102-
function upsertManyMutably(entities: T[], state: R): void
103-
function upsertManyMutably(entities: any[], state: any): void {
104-
const added: any[] = []
105-
const updated: any[] = []
94+
function upsertManyMutably(entities: T[], state: R): void {
95+
const added: T[] = []
96+
const updated: Update<T>[] = []
10697

10798
for (const entity of entities) {
10899
const id = selectIdValue(entity, selectId)
@@ -117,7 +108,7 @@ export function createSortedStateAdapter<T>(selectId: any, sort: any): any {
117108
addManyMutably(added, state)
118109
}
119110

120-
function areArraysEqual(a: any[], b: any[]) {
111+
function areArraysEqual(a: unknown[], b: unknown[]) {
121112
if (a.length !== b.length) {
122113
return false
123114
}
@@ -131,8 +122,7 @@ export function createSortedStateAdapter<T>(selectId: any, sort: any): any {
131122
return true
132123
}
133124

134-
function merge(models: T[], state: R): void
135-
function merge(models: any[], state: any): void {
125+
function merge(models: T[], state: R): void {
136126
models.sort(sort)
137127

138128
// Insert/overwrite all new/updated

src/entities/state_adapter.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
1-
import createNextState, { Draft, isDraft } from 'immer'
1+
import createNextState, { isDraft } from 'immer'
22
import { EntityState } from './models'
33
import { PayloadAction, isFSA } from '../createAction'
44

55
export function createStateOperator<V, R>(
66
mutator: (arg: R, state: EntityState<V>) => void
7-
): EntityState<V>
8-
export function createStateOperator<V, R>(
9-
mutator: (arg: any, state: any) => void
10-
): any {
7+
) {
118
return function operation<S extends EntityState<V>>(
12-
state: any,
9+
state: S,
1310
arg: R | PayloadAction<R>
1411
): S {
15-
const runMutator = (draft: Draft<EntityState<V>>) => {
16-
if (isFSA(arg)) {
12+
function isPayloadActionArgument(
13+
arg: R | PayloadAction<R>
14+
): arg is PayloadAction<R> {
15+
return isFSA(arg)
16+
}
17+
18+
const runMutator = (draft: EntityState<V>) => {
19+
if (isPayloadActionArgument(arg)) {
1720
mutator(arg.payload, draft)
1821
} else {
1922
mutator(arg, draft)

0 commit comments

Comments
 (0)