2017-09-27 5 views
0

TypeScriptの新しいts-checkを使用して、ジェネリック関数の処理方法を理解できません。Typescript ts-check javascript generics

/** 
* @type {Reducer<IPoiState, any>} 
*/ 
const poi = handleActions({ 
    [ADD_BOOKMARK_START]: (state) => { 
    return { ...state }; 
    }, 
}, {}); 

handleActionsタイプはDefinitey型付きから来ているので、

export function handleActions<State>(
    reducerMap: ReducerMap<State>, 
    initialState: State 
): Reducer<State, any>; 

...のように見える、私は

Type 'Reducer<{}, any>' is not assignable to type 'Reducer<IPoiState, any>'. 
    Type '{}' is not assignable to type 'IPoiState'. 

がとにかくそこには...というエラーを取得していますジェネリックを強制する?

+0

「IPoiState」はどのように見えるのですか? –

+0

私は推測することができますが、あなたの 'handleActions'宣言から出てくる型が間違っていると思います。 'State'と' IPoiState'は型システムのどこかにありますか?型システムは 'handleActions'が' Reducer <{}, any> 'を返すと間違って判断していますので、実際に' Reducer 'の型にする必要があります(' State'は 'IPoiState ')。 TypeScriptに 'duck typing'があるので、 –

答えて

1

オブジェクトをキャストするかタイプするには、このタイプのアングルをつける前に、このタイプのアングルをこのアングルにするには、<IPoiState>{}のように角かっこを使用します。

Type Assertion

+0

は必要ありません。 –

+0

@Sahuagin興味深いことに、このケースでは、IPoistateがどのように見えて、メソッドがサポートされているかを知る必要があります。 – rjustin

+0

さて、メンバー名として変数 'ADD_BOOKMARK_START'を使用しているので、あなたは正しいと思われ、キャストが必要です。私が似たような例を設定した場合、私はそれを使わなければうまくいかないでしょう。 –