export interface Action{
type: string;
}
export interface LoadTodos {
type: "LOAD_TODOS_ACTION"
}
export interface AddTodo {
type: "ADD_TODO_ACTION",
todo: Todo
}
export type KnownAction = LoadTodos | LoadTodosSuccess | AddTodo;
function isSomeType<T extends KnownAction>(x: any): x is T {
return x && typeof (x.type) === "LOAD_TODOS_ACTION";
}
let knownAction: actions.KnownAction = { type: "LOAD_TODOS_ACTION" };
if (isSomeType(knownAction)) {
let loadTodosAction = knownAction; // load Todos type
}
我在期待上面的行爲。我想以通用的方式做到這一點,所以我不想重複如果,isSomeType函數中的else語句。基本上我想根據'type'屬性將字符串文字類型轉換爲適當的類型。我的嘗試是這樣做的:與字符串文字類型的子類型匹配的手稿模式
function isSomeType<T extends Action>(x: any): x is T {
type p1 = T['type'];
return x && typeof (x.type) === p1;
}
但消息說''p1'只是指一種類型,但在這裏用作一個變量。
有沒有辦法做到這一點?
這是不可能做到這一點這種方式,因爲類型別名不是在運行時可用。 – MistyK