Skip to content

Commit 90c340a

Browse files
ChadLeforterikras
authored andcommitted
Added tsx generic typing for FieldArray (#88)
1 parent 281a64f commit 90c340a

File tree

1 file changed

+28
-18
lines changed

1 file changed

+28
-18
lines changed

src/index.d.ts

+28-18
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@ import { FieldSubscription, FieldState } from 'final-form'
33
import { UseFieldConfig } from 'react-final-form'
44
export const version: string
55

6-
export interface FieldArrayRenderProps<T extends HTMLElement> {
6+
export interface FieldArrayRenderProps<FieldValue, T extends HTMLElement> {
77
fields: {
88
forEach: (iterator: (name: string, index: number) => void) => void
9-
insert: (index: number, value: any) => void
10-
map: (iterator: (name: string, index: number) => any) => any[]
9+
insert: (index: number, value: FieldValue) => void
10+
map: <R>(iterator: (name: string, index: number) => R) => R[]
1111
move: (from: number, to: number) => void
12-
update: (index: number, value: any) => void
12+
update: (index: number, value: FieldValue) => void
1313
name: string
14-
pop: () => any
15-
push: (value: any) => void
16-
remove: (index: number) => any
17-
shift: () => any
14+
pop: () => FieldValue
15+
push: (value: FieldValue) => void
16+
remove: (index: number) => FieldValue
17+
shift: () => FieldValue
1818
swap: (indexA: number, indexB: number) => void
19-
unshift: (value: any) => void
20-
} & FieldState
19+
unshift: (value: FieldValue) => void
20+
} & FieldState<FieldValue[]>
2121
meta: Partial<{
2222
// TODO: Make a diff of `FieldState` without all the functions
2323
active: boolean
@@ -42,19 +42,29 @@ export interface RenderableProps<T> {
4242
render?: (props: T) => React.ReactNode
4343
}
4444

45-
export interface UseFieldArrayConfig extends UseFieldConfig {
45+
export interface UseFieldArrayConfig<FieldValue>
46+
extends UseFieldConfig<FieldValue> {
4647
isEqual?: (a: any[], b: any[]) => boolean
4748
}
4849

49-
export interface FieldArrayProps<T extends HTMLElement>
50-
extends UseFieldArrayConfig,
51-
RenderableProps<FieldArrayRenderProps<T>> {
50+
export interface FieldArrayProps<FieldValue, T extends HTMLElement>
51+
extends UseFieldArrayConfig<FieldValue>,
52+
RenderableProps<FieldArrayRenderProps<FieldValue, T>> {
5253
name: string
5354
[otherProp: string]: any
5455
}
5556

56-
export const FieldArray: React.FC<FieldArrayProps<any>>
57-
export function useFieldArray<T extends HTMLElement>(
57+
export const FieldArray: <
58+
FieldValue = any,
59+
T extends HTMLElement = HTMLElement
60+
>(
61+
props: FieldArrayProps<FieldValue, T>
62+
) => React.ReactElement
63+
64+
export function useFieldArray<
65+
FieldValue = any,
66+
T extends HTMLElement = HTMLElement
67+
>(
5868
name: string,
59-
config: UseFieldArrayConfig
60-
): FieldArrayRenderProps<T>
69+
config: UseFieldArrayConfig<FieldValue>
70+
): FieldArrayRenderProps<FieldValue, T>

0 commit comments

Comments
 (0)