diff --git a/types/redux-form/index.d.ts b/types/redux-form/index.d.ts index f081da21c9..58d0002053 100644 --- a/types/redux-form/index.d.ts +++ b/types/redux-form/index.d.ts @@ -7,6 +7,7 @@ // Alex Young // Anton Novik // Huw Martin +// Matt Davis // Ethan Resnick // Tim de Koning // Maddi Joyce diff --git a/types/redux-form/lib/FieldArray.d.ts b/types/redux-form/lib/FieldArray.d.ts index 026e75633f..ce43e8d8a7 100644 --- a/types/redux-form/lib/FieldArray.d.ts +++ b/types/redux-form/lib/FieldArray.d.ts @@ -1,29 +1,30 @@ import { Component, ComponentType } from "react"; import { Validator } from "../index"; -export interface BaseFieldArrayProps

{ +interface _BaseFieldArrayProps

{ name: string; - component: ComponentType

; + component: ComponentType & P>; validate?: Validator | Validator[]; warn?: Validator | Validator[]; - forwardRef?: boolean; - props?: P; + withRef?: boolean; rerenderOnEveryChange?: boolean; } -export interface GenericFieldArray extends Component & Partial

> { +export type BaseFieldArrayProps

= (P | { props: P}) & _BaseFieldArrayProps; + +export interface GenericFieldArray extends Component> { name: string; valid: boolean; - getRenderedComponent(): Component & P>; + getRenderedComponent(): Component & P>; } -export class FieldArray

extends Component & Partial

> implements GenericFieldArray { +export class FieldArray

extends Component> implements GenericFieldArray { name: string; valid: boolean; - getRenderedComponent(): Component & P>; + getRenderedComponent(): Component & P>; } -export interface WrappedFieldArrayProps { +export interface WrappedFieldArrayProps { fields: FieldArrayFieldsProps; meta: FieldArrayMetaProps; } @@ -35,12 +36,13 @@ export interface FieldArrayFieldsProps { get(index: number): FieldValue; getAll(): FieldValue[]; removeAll(): void; + insert(index: number, value: FieldValue): void; name: string; length: number; map(callback: FieldIterate): R[]; pop(): FieldValue; - push(value?: FieldValue): void; + push(value: FieldValue): void; remove(index: number): void; shift(): FieldValue; swap(indexA: number, indexB: number): void; diff --git a/types/redux-form/redux-form-tests.tsx b/types/redux-form/redux-form-tests.tsx index 95c673d270..91087e4a22 100644 --- a/types/redux-form/redux-form-tests.tsx +++ b/types/redux-form/redux-form-tests.tsx @@ -160,7 +160,7 @@ const FieldsCustom = Fields as new () => GenericFields; /* FieldArray */ -const MyArrayField: React.StatelessComponent = ({ +const MyArrayField: React.StatelessComponent = ({ children }) => null; @@ -169,20 +169,19 @@ const MyArrayField: React.StatelessComponent = ({ interface MyFieldValue { num: number; } + interface MyFieldArrayCustomProps { foo: string; + bar: number; } -const MyCustomArrayField: React.StatelessComponent = ({ +const MyCustomArrayField: React.StatelessComponent> = ({ children, - foo + fields, + foo, + bar }) => null; -type MyFieldArrayProps = MyFieldArrayCustomProps & WrappedFieldArrayProps; -const MyFieldArray: React.StatelessComponent = ({ - children, - fields -}) => null; const FieldArrayCustom = FieldArray as new () => GenericFieldArray; /* Tests */ @@ -329,10 +328,22 @@ const Test = reduxForm({ component={ MyArrayField } /> + {/* Passing child props via explicit props arg (TS-preferable)*/} + + + {/* Passing child props via extra props passed to parent */} diff --git a/types/redux-form/v7/lib/FieldArray.d.ts b/types/redux-form/v7/lib/FieldArray.d.ts index a4599b5e97..ce43e8d8a7 100644 --- a/types/redux-form/v7/lib/FieldArray.d.ts +++ b/types/redux-form/v7/lib/FieldArray.d.ts @@ -1,29 +1,30 @@ import { Component, ComponentType } from "react"; import { Validator } from "../index"; -export interface BaseFieldArrayProps

{ +interface _BaseFieldArrayProps

{ name: string; - component: ComponentType

; + component: ComponentType & P>; validate?: Validator | Validator[]; warn?: Validator | Validator[]; withRef?: boolean; - props?: P; rerenderOnEveryChange?: boolean; } -export interface GenericFieldArray extends Component & Partial

> { +export type BaseFieldArrayProps

= (P | { props: P}) & _BaseFieldArrayProps; + +export interface GenericFieldArray extends Component> { name: string; valid: boolean; - getRenderedComponent(): Component & P>; + getRenderedComponent(): Component & P>; } -export class FieldArray

extends Component & Partial

> implements GenericFieldArray { +export class FieldArray

extends Component> implements GenericFieldArray { name: string; valid: boolean; - getRenderedComponent(): Component & P>; + getRenderedComponent(): Component & P>; } -export interface WrappedFieldArrayProps { +export interface WrappedFieldArrayProps { fields: FieldArrayFieldsProps; meta: FieldArrayMetaProps; } @@ -35,6 +36,7 @@ export interface FieldArrayFieldsProps { get(index: number): FieldValue; getAll(): FieldValue[]; removeAll(): void; + insert(index: number, value: FieldValue): void; name: string; length: number; diff --git a/types/redux-form/v7/redux-form-tests.tsx b/types/redux-form/v7/redux-form-tests.tsx index 8ad71bbc42..20288b5fe6 100644 --- a/types/redux-form/v7/redux-form-tests.tsx +++ b/types/redux-form/v7/redux-form-tests.tsx @@ -160,7 +160,7 @@ const FieldsCustom = Fields as new () => GenericFields; /* FieldArray */ -const MyArrayField: React.StatelessComponent = ({ +const MyArrayField: React.StatelessComponent = ({ children }) => null; @@ -171,18 +171,16 @@ interface MyFieldValue { } interface MyFieldArrayCustomProps { foo: string; + bar: number; } -const MyCustomArrayField: React.StatelessComponent = ({ +const MyCustomArrayField: React.StatelessComponent> = ({ children, - foo + fields, + foo, + bar }) => null; -type MyFieldArrayProps = MyFieldArrayCustomProps & WrappedFieldArrayProps; -const MyFieldArray: React.StatelessComponent = ({ - children, - fields -}) => null; const FieldArrayCustom = FieldArray as new () => GenericFieldArray; /* Tests */ @@ -329,11 +327,24 @@ const Test = reduxForm({ component={ MyArrayField } /> + {/* Passing child props via explicit props arg (TS-preferable)*/} + + + {/* Passing child props via extra props passed to parent */} +