我真的希望能够使用typescript完全输入,而不必重新实现具有潜在冲突签名的类型。
在这种情况下,我想使用来自loadUserList的调用/返回签名,并且仍然可以将它用于调度和连接。
loadUserList是一个redux-thunk函数,因此一旦它通过中间件,它最终会返回一个字符串。但是,我需要发送到DispatchProps
的原型与我发送给CDispatchProps
的原型(发送到连接函数的道具)不同。
虽然我可以将CDispatchProps
更改为any
,但实际上无法解决我的主要目标,即从userList.tsx
导入类型签名,以便参数和返回有类型安全(我愿意放弃连接 - 因为它在"黑盒"类别中)。
也许最好的路线是一些打字法术,它将从ThunkAction< ...>中提取参数类型和返回类型。以合理的方式。
UserListPage.tsx
import { loadUserList, UserQuery } from "../store/actions/userList";
type DispatchProps = {
loadUserList: (query: UserQuery) => string,
};
type CDispatchProps = {
loadUserList: typeof loadUserList,
};
class UserListPage extends React.Component<Props & DispatchProps, State> {
componentWillMount() {
this.setState({ id: this.props.loadUserList(this.state.query) });
}
}
export default connect<any, CDispatchProps, Props>((store: Store) => ({
users: store.userList.entities,
loading: store.userList.fetchStatus,
}), { loadUserList })(UserListPage);
userList.ts
export function loadPrivateUserList(options: UserQuery, force?: boolean): ThunkAction<string, State, null> {
return (dispatch: redux.Dispatch<State>, getState: () => State): string => {
const { userList } = getState();
const id = computeID(options);
// Do some async actions
return id;
}
}