2016-09-20 2 views
3

私は最初の反応を開発しようとしています& reduxとtypescriptの例ですが、私はアクションの宣言に固執しています。 typescriptコンパイラは同じエラーを何度も何度もスローします。redux-actions Typescriptはアクションを宣言します

多分私は概念の何かを忘れました。

コードはthisチュートリアルに基づいています。

graphActions.ts

/// <reference path="../../../typings/index.d.ts"/> 

import { createAction, Action } from 'redux-actions'; 
import * as _ from 'lodash'; 
import {IGraphObject} from "../components/graph/GraphObject"; 
import {Graph} from "../models/Graph"; 
import {ADD_GRAPH} from "../constants/ActionTypes"; 

const addGraph = createAction<Graph>(
    ADD_GRAPH, 
    (graph: IGraphObject) => ({graphObject: graph}) 
); 

export { 
    addGraph 
} 

Graph.ts

import {IGraphObject} from "../components/graph/GraphObject"; 

export type Graph = { 
    id?: number; 
    graphObject: IGraphObject 
} 

GraphObject.ts

export interface IGraphObject { 
    id?: number; 
    graphConfig: IGraphConfig; 
    graphInstance: any; 
    initGraph(container: HTMLElement); 
    addShape(shape: ICustomShapeElement); 
} 

typescriptですコンパイラがスロー任意のヘルプについて喜んでいるだろう

(11,5): error TS2345: Argument of type '(graph: IGraphObject) => { graphObject: IGraphObject; }' is not assignable to parameter of type '(...args: { id?: number; graphObject: IGraphObject; }[]) => { id?: number; graphObject: IGraphObj...'. 
    Types of parameters 'graph' and 'args' are incompatible. 
    Type '{ id?: number; graphObject: IGraphObject; }' is not assignable to type 'IGraphObject'. 
     Property 'graphConfig' is missing in type '{ id?: number; graphObject: IGraphObject; }'. 

答えて

1

解決済み。 redux-actionsの入力を見て私を助けました。

Reduxの-アクションタイピング

export function createAction<Input, Payload>(
     actionType: string, 
     payloadCreator?: PayloadCreator<Input, Payload> 
): (...args: Input[]) => Action<Payload>; 

ソリューション

const addGraph = createAction<IGraphObject, Graph>(
    ADD_GRAPH, 
    (graphObject: IGraphObject) => ({graphObject: graphObject}) 
); 
-1

は、私はこの問題はここにあると思う:あなたはその匿名関数のパラメータと、その関数の期待戻り値としてIGrapObjectを渡している

const addGraph = createAction<Graph>(
    ADD_GRAPH, 
    (graph: IGraphObject) => ({graphObject: graph}) 
); 

タイプGraphです。

クラスGraphは、IGraphObjectを実装する必要があります。

しかし、私はそうのようにあなたは、グラフを返す場合は最高のだろうと思う:

const addGraph = createAction<Graph>(
    ADD_GRAPH, 
    (graph: Graph) => ({graphObject: graph}) 
); 

はまた、グラフと、おそらくそれはIcustomShapeElementの配列ですのでaddShape機能を変更するプロパティgraphConfiggraphInstanceを移動代わりにGrapに追加してください。

それは意味がありますか?

//ダニエル

+0

Reduxのストアのグラフは、より複雑なグラフのインスタンスを含むべきである単純型です。 私が達成したいのは:ユーザーがaddGraphボタンをクリック=> graphObjectInstanceを作成し、それをreduxストアにディスパッチします。 doToを文字列から作成しなければならない例のように、 –

+0

私は正しく理解すれば、それはaddGraph = createAction であるはずです。 – Daniel

+1

解決しました。 redux-actionsのindex.d.tsを見れば私は助けになりました。 'constのaddGraph = createAction ' –

関連する問題