내 앵귤러 2에서는 ngrx를 사용하고 일부 액션과 리듀서가 있습니다. 행동의 예 : - 아니, 및 Actions
는 ActionOne
또는 ActionTwo
수 있습니다 조합 유형입니다Typescript v2.2.2 union type 오류 (TS2339)
import { Action } from '@ngrx/store';
export const actionTypes = {
ACTION_1: type('Actions 1'),
ACTION_2: type('Actions 2'),
};
export class ActionOne implements Action {
public type = actionTypes.ACTION_1;
constructor(public payload: any) { }
}
export class ActionTwo implements Action {
public type = actionTypes.ACTION_2;
}
export type Actions
= ActionOne
| ActionTwo;
그래서, 일부 작업은 페이로드, 다른 사람이있다. 그러나 나 감속기에서 나는 오류가 있습니다 Property 'payload' does not exist on type 'Actions' Property 'payload' does not exist on type 'ActionTwo'.
감속기는 다음과 같이이다 : 나는 2.0.3
에서 2.2.2
에 타이프 라이터 버전을 업데이트 한 후이 오류가 발생했습니다
export function reducer(state = initialState, action: Actions): IState {
switch (action.type) {
case actions.actionTypes.ACTION_1: {
return Object.assign({}, state, {
data: action.payload,
});
}
case ...
}
}
. 그래서 모든 작업에 페이로드를 두지 않고 오류를 수정하는 방법이 있습니까? 이 경우에 tsconfog.json
의 옵션이있을 수 있습니까? 컴파일러는 권리만을 공유 속성을 가진 유형의 조합 결과로 분명히
case actions.actionTypes.ACTION_1: {
return Object.assign({}, state, {
data: (action as ActionOne).payload,
});
}
및 :
'type()'은 typescript가 아니며, ngrx의 util 함수입니다. –
@qweasd 업데이트를 확인하십시오. – kennytm