export interface LoadTodos {
type: "LOAD_TODOS_ACTION"
}
export interface AddTodo {
type: "ADD_TODO_ACTION",
todo: Todo
}
export type KnownAction = LoadTodos| AddTodo;
目前我正在这样做:
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”因此应该有一种方法可以从另一方获得一个。
答案 0 :(得分:1)
如果我理解正确,那么:
Moviemanager.getInstance().getMovie(key)
或者:
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
}