2016-12-28 134 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 
} 
相關問題