Javascript 如何为redux连接的组件自动生成typescript接口
是否有一种方法可以使用Javascript 如何为redux连接的组件自动生成typescript接口,javascript,reactjs,typescript,redux,redux-thunk,Javascript,Reactjs,Typescript,Redux,Redux Thunk,是否有一种方法可以使用MapStateTrops和mapDispatchToProps类型自动扩展连接组件的接口?例如,以下代码: interface ComponentProps { state?: State; action?: (id: string) => void; } const mapStateToProps = (state: any) => ({ state: state, }); const mapDispatchToProps = (dispat
MapStateTrops
和mapDispatchToProps
类型自动扩展连接组件的接口?例如,以下代码:
interface ComponentProps {
state?: State;
action?: (id: string) => void;
}
const mapStateToProps = (state: any) => ({
state: state,
});
const mapDispatchToProps = (dispatch: any) => ({
action: (id: string) => dispatch(Action),
});
const Component = (props: ComponentProps) => <div>...</div>;
export const ConnectedComponent = connect(
mapStateToProps,
mapDispatchToProps,
)(Component);
是否可以对
connect
执行相同的操作?以下是在中的操作方式:
ComponentProps extends WithStyles<typeof styles> {
actualProps: any;
}
const ConnectedComponent = withStyles(styles)(Component);
import Types from 'MyTypes';
import { bindActionCreators, Dispatch } from 'redux';
import { connect } from 'react-redux';
import * as React from 'react';
import { countersActions } from '../features/counters';
// Thunk Action
const incrementWithDelay = () => async (dispatch: Dispatch): Promise<void> => {
setTimeout(() => dispatch(countersActions.increment()), 1000);
};
const mapStateToProps = (state: Types.RootState) => ({
count: state.counters.reduxCounter,
});
const mapDispatchToProps = (dispatch: Dispatch<Types.RootAction>) =>
bindActionCreators(
{
onIncrement: incrementWithDelay,
},
dispatch
);
type Props = ReturnType<typeof mapStateToProps> &
ReturnType<typeof mapDispatchToProps> & {
label: string;
};
export const FCCounter: React.FC<Props> = props => {
const { label, count, onIncrement } = props;
const handleIncrement = () => {
// Thunk action is correctly typed as promise
onIncrement().then(() => {
// ...
});
};
return (
<div>
<span>
{label}: {count}
</span>
<button type="button" onClick={handleIncrement}>
{`Increment`}
</button>
</div>
);
};
export const FCCounterConnectedBindActionCreators = connect(
mapStateToProps,
mapDispatchToProps
)(FCCounter);
type Props = ReturnType<typeof mapStateToProps> & ReturnType<typeof mapDispatchToProps> {
label: string;
};