【发布时间】:2019-09-10 22:17:52
【问题描述】:
使用redux,我最终在我的商店代码中编写了以下sn-p:
type CombinedParamTypes<T extends {
[key: string]: (state: any, action: any) => any;
}> = T extends {
[key: string]: (state: infer R, action: any) => any;
} ? R : never;
type CombinedReturnTypes<T extends {
[key: string]: (...args: any) => any;
}> = T extends {
[key: string]: (...args) => infer R;
} ? R : never;
例子:
import camera from "./camera/reducer";
import settings from "./settings/reducer";
export const ALL_REDUCERS = {
camera,
settings,
};
const COMBINED_REDUCERS = combineReducers(ALL_REDUCERS);
export type FlatReduxState = CombinedParamTypes<typeof ALL_REDUCERS>;
// returns intersection type: ICameraState & ISettingsState
export type WhyDifferent = CombinedReturnTypes<typeof ALL_REDUCERS>;
// returns union type: ICameraState | ISettingsState
谁能解释为什么他们返回的方式不同?我意识到一个正在查看参数,另一个正在查看返回类型,但这如何转化为决定交集与联合?
【问题讨论】:
-
询问需要使用什么参数来调用函数联合将始终是参数类型的交集。 IE如果我问打字稿我需要什么参数来调用函数F1和F2的联合,它将是F1和F2的参数如果我问打字稿,ReturnType是不一样的F1的ReturnType是什么| F2 它将是返回类型的联合,因为它要么不是两者。
标签: reactjs typescript redux react-redux