2016-12-28 34 views
1
export interface LoadTodos { 
    type: "LOAD_TODOS_ACTION" 
} 

export interface AddTodo { 
    type: "ADD_TODO_ACTION", 
    todo: Todo 
} 

export type KnownAction = LoadTodos| AddTodo; 

は、現在、私はこれをやっている:Typescriptで文字列を文字列型に変換する方法はありますか?

CallAction({ type: "LOAD_TODOS_ACTION" }); 

私はこれやりたい:

CallAction("LOAD_TODOS_ACTION"); 

または理想的に:

CallAction<LoadTodos>(); 

どのように私はCallActionを実装する必要がありましたか?それも可能ですか?

function CallAction<T extends KnownAction>() 
{ 
    type P1 = T["type"]; 
doSomethingWithAction({type:T.type}); // type property is an instance property so cannot be retrieved obviously 

//or 

type P1 = T["type"]; 
doSomethingWithAction({type:P1}); // P1 is a type not string 


    } 

LoadTodosには「LOAD_TODOS_ACTION」というタイプが含まれています。そのため、一方を他方から取得する方法が必要です。

答えて

1

私が正しくあなたを理解していれば:

type ActionType = "LOAD_TODOS_ACTION" | "ADD_TODO_ACTION"; 

interface Action { 
    type: ActionType; 
} 

interface LoadTodos extends Action { 
    type: "LOAD_TODOS_ACTION" 
} 

interface AddTodo extends Action { 
    type: "ADD_TODO_ACTION", 
    todo: Todo 
} 

function CallAction(type: ActionType) { 
    // whatever 
} 

または:

function CallAction<T extends Action>(action: T) { 
    // whatever 
} 
関連する問題