如何在Typescript中将字符串转换为字符串文字类型?

时间:2016-12-28 17:30:34

标签: typescript

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”因此应该有一种方法可以从另一方获得一个。

1 个答案:

答案 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
}