以下是我正在处理的实体的类型(时间轴为TimeLineElement[]
export type ProJectTimelineElement = {
project: Project;
};
export type MissionTimelineElement = {
mission: EntityDataState;
};
export type AvailabilityTimelineElement = {
availabilities: Availability[];
};
export type TimelineElementData = {
project?: Project;
mission?: EntityDataState;
availabilities?: Availability[];
};
export type TimelineElement = {
date: string;
elements: TimelineElementData[];
};
export type EntityState = {
data: EntityDataState[];
isLoading: boolean;
error: boolean;
timeline: TimelineElement[];
};
这里是我的reducer,我有类型问题(说即使在检查if语句之后它也是未定义的:
updateAvailabilities(state, action: PayloadAction<Availability>) {
const timelineIndexToModify = state.timeline.findIndex(element => {
const payloadDay = new Date(action.payload.start).getDate();
const payloadMonth = new Date(action.payload.start).getMonth();
const elementDay = new Date(element.date).getDate();
const elementMonth = new Date(element.date).getMonth();
return payloadDay === elementDay && payloadMonth === elementMonth;
});
if (state.timeline[timelineIndexToModify].elements.length === 0) {
state.timeline[timelineIndexToModify].elements.push({
availabilities: [{ ...action.payload }]
});
} else {
const elementIndexToModify = state.timeline[
timelineIndexToModify
].elements.findIndex(element => {
if (element.availabilities) {
return true;
} else return false;
});
if (elementIndexToModify === -1) {
state.timeline[timelineIndexToModify].elements.push({
availabilities: [{ ...action.payload }]
});
} else if (
state.timeline[timelineIndexToModify].elements[elementIndexToModify]
.availabilities
) {
const availabilityIndexToModify = state.timeline[
timelineIndexToModify
].elements[elementIndexToModify].availabilities.findIndex(
element => element.id === action.payload.id
);
state.timeline[timelineIndexToModify].elements[
elementIndexToModify
].availabilities[availabilityIndexToModify] = action.payload;
}
}
}
问题出在最后一条else if
语句中,因为这条语句可能是未定义的,我检查它是否存在,但typescript并不关心这一点,并说它可能是未定义的。
我不知道该怎么办,任何帮助将不胜感激
typescript error in vscode
1条答案
按热度按时间xwbd5t1u1#
我已经遇到了同样的问题,并提出了疑问。你应该在使用之前将其分配给一个变量,如下所示。
My previous question here.