我正在编写Reducer函数,它接受具有类型属性的操作,该属性的类型是Enum类型,而操作有效负载取决于Enum类型.
我知道我可以使用联合类型为每种枚举类型提供不同的有效负载类型,但是我有一个操作,它的有效负载是Date,而所有其他操作的有效负载类型都是Numbers.
What I've tried个
enum DatePickerActionType {
PICK_YEAR = 'PICK_YEAR',
PICK_MONTH = 'PICK_MONTH',
PICK_DATE = 'PICK_DATE',
PICK_HOURS = 'PICK_HOURS',
PICK_MINUTES = 'PICK_MINUTES',
}
type DatePickerAction =
| {
type: DatePickerActionType.PICK_DATE;
payload: Date;
}
| {
type: DatePickerActionType;
payload: number;
};
const datePickerReducer = (state: DatePickerValue, action: DatePickerAction): DatePickerValue => {
switch (action.type) {
case DatePickerActionType.PICK_DATE: {
const a = action.payload;
}
//...
}
};
However typescript still shows me action.type as number or Date when action type is PICK_DATE
有没有办法将除枚举类型以外的所有操作的有效负载类型定义为数字,或者我应该使用联合类型来分别定义所有操作?
type DatePickerAction =
| {
type: DatePickerActionType.PICK_DATE;
payload: Date;
}
| {
type: DatePickerActionType.PICK_HOURS;
payload: number;
}
| {
type: DatePickerActionType.PICK_MINUTES;
payload: number;
}
| {
/**... */
};