2016-12-28 143 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 
} 
相关问题