如何从泛型类型自动设置字段?

时间:2018-01-12 11:14:30

标签: typescript

我有一个界面和一个类型:

interface IUserAction<T, P> {
    readonly type: T;
    readonly payload: P;
}

export type UserAction<T, P> = IUserAction<T, P>;

我还有一个枚举UserActions

export enum UserActions {
    SetCountry = 'SetCountry',
};

现在我想创建一个反映此类型的变量action

const action: UserAction<UserActions.SetCountry, SetCountryActionPayload> = {
            payload: {countryId: Country.Usa}
        };

我看到了错误:

Property 'type' is missing in type...

这似乎是合理的,因为我之前手动为每个动作添加了类型。

我想知道,是否可以将type字段设置为等于SetCountry,以便除了提供的第一个通用类型之外不必输入它?

1 个答案:

答案 0 :(得分:0)

我认为这里的问题是UserActions.SetCountry不是一个类型,它只是UserActions类型的枚举成员。所以你要做的事情并没有多大意义。

你需要做的是:

const action: UserAction<UserActions, SetCountryActionPayload> = {
            type: UserActions.SetCountry,
            payload: {countryId: Country.Usa}
        };

其中UserActions实际上是通用类型,您需要正确定义通用字段类型。遗憾的是,我无法找到一种方法,您可以使用打字稿来猜测您想要使用哪个UserActions成员。