javascript - Redux skjema egenskaper & typescript
Har lett i årevis, fant ikke noe som var verdt det, skjønt.
Når jeg jobbet med flyt, kunne jeg enkelt:
import { type FieldProps, FormProps } from 'redux-form';
Finnes det en lignende (og så enkel) måte å riktig sette props til redux-skjema i Typescript på?
Dokumentasjonen sier ingenting om TypeScript, det er bare en side for Flow-typinger.
Jeg oppdaget imidlertid at jeg kan importere noe som propTypes fra redux-form:
import { reduxForm, propTypes } from 'redux-form'
Men - redux-form har ingenting som propTypes eksportert, så dokumentasjonen er litt utdatert.
Lenke: https://redux-form.com/7.2.1/docs/api/props.md/
Takk på forhånd for enhver form for hjelp.
tl;dr class RegistrationForm extends React.PureComponent<any> {
what to drop here ^^^^^
Svar #1
Du må installere @types/redux-form-pakken med pakkehåndtereren din. @types/redux-form-pakken inkluderer typedefinisjoner for redux-form-pakken.
Da kan du importere typedefinisjoner fra redux-form, for eksempel InjectedFormProps.
Skjemaet ditt som vil bli pakket med reduxForm() bør ha props som utvider InjectedFormProps<FormData={}, P={}>.
typen reduxForm() er generisk reduxForm<FormData={}, P={}>(...
Se eksemplet:
import * as React from 'react';
import { reduxForm, InjectedFormProps, Field } from 'redux-form';
import { IUser } from './index';
interface IProps {
message: string;
}
class UserForm extends React.Component<InjectedFormProps<IUser, IProps> & IProps> {
render() {
const { pristine, submitting, reset, handleSubmit, message } = this.props;
return (
<form onSubmit={handleSubmit}>
<div>{message}</div>
<div>
<label>First Name </label>
<Field
name="firstName"
component="input"
type="text"
placeholder="First Name"
/>
</div>
<div>
<label>Last Name </label>
<Field
name="lastName"
component="input"
type="text"
placeholder="Last Name"
/>
</div>
<div>
<button type="submit" disabled={pristine || submitting}>
Submit
</button>
<button type="button" disabled={pristine || submitting} onClick={reset}>
Clear Values
</button>
</div>
</form>
);
}
}
export default reduxForm<IUser, IProps>({
form: 'userForm',
})(UserForm);
Kildekoden til @types/redux-form-pakken ligger her. Du kan se typene der og mer kompliserte eksempler i filen redux-form-tests.tsx som brukes til typekontroll.