2017-05-18 8 views
0

Reduce의 Typescript를 사용하여 감속기 기능에서 적절한 유형을 제 조치 속성에 전달하려고하는데 약간의 어려움이 있습니다.유형을 Redux 감속기에 올바르게 전달

action: {} 

을하지만 이런 식으로 뭔가를 시도했습니다 있도록 타이프에서보다 구체적인 행동 유형에 대한 역할 : 일반 ES6 구문에서 나는 그렇게 같은 형태로 통과 할 것

import { 
    UPDATE_STATE, 
} from '../constants/ActionTypes'; 

import * as Actions from '../actions/index.js'; 

const initialState = { 
    someState: '', 
} 

// TODO: Type checking here is throwing an error 

export default function counter(state = initialState, action : Actions) { 
    switch(action.type) { 
    case UPDATE_STATE: 
     return { 
     ...state, 
     } 
    } 
} 

타이프는 현재

오류를 [AT-로더] ./src/reducers/numberpad.tsx:27:64 TS2304에 : 이름 '작업'을 찾을 수 없습니다 내가 시도하고 웹팩에서 컴파일 할 때이 오류를 던지고.

작업 :

index.js 
import * as types from '../constants/ActionTypes' 

export function update(val) { 
    return { type: types.UPDATE, val } 
} 

상수 : 지금까지 내가 손해를보고, 나는 또한 "개체"로 유형을 전달하려고했습니다 해요

export const UPDATE = 'UPDATE' 

(무슨 일이수록 내 행동에서 반환 된 것은 실제 개체입니다.) 그러나 이것은 인식되지 않는 것 같습니다. 또한 더 유연하게 "any"유형을 지정하려고 시도했지만 TS는 그 중 하나를 좋아하지 않는 것으로 보입니다.

나는 이러한 경우 TS가 무엇을 검사하는지 조금 혼란스러워합니다. 어떤 생각이라도 환영받을 것입니다. 고맙습니다.

+0

당신이 당신의 행동/인덱스 파일을 보여 주시겠습니까 당신의 행위? 내 추측은 문제가 거기에있다 –

+0

그냥 그들을 – Xelad1

답변

2

조치는 인터페이스 또는 유형이어야합니다.

가져 오기에서 index.js 파일의 모든 내용을 가져 와서 "작업"으로 지정합니다.

index.js 파일에서 유형 또는 인터페이스를 선언해야합니다.

당신의 감속기에 그런
export interface IAction { 
    type: string; 
    data: any; 
} 

, 다음이 필요합니다

import {IAction} from '../actions/index.js'; 

... 다음 감속기 : 내보내는 곳

export default function counter(state = initialState, action : IAction) { 
    switch(action.type) { 
    case UPDATE_STATE: 
     return { 
     ...state, 
     } 
    } 
} 
+0

내 입에서 단어를 가지고 .... 잘 손가락 :) –

+0

아,이 대단히 도움이되었다, 감사합니다! – Xelad1