我有一个界面和一个类型:
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
,以便除了提供的第一个通用类型之外不必输入它?
答案 0 :(得分:0)
我认为这里的问题是UserActions.SetCountry不是一个类型,它只是UserActions类型的枚举成员。所以你要做的事情并没有多大意义。
你需要做的是:
const action: UserAction<UserActions, SetCountryActionPayload> = {
type: UserActions.SetCountry,
payload: {countryId: Country.Usa}
};
其中UserActions实际上是通用类型,您需要正确定义通用字段类型。遗憾的是,我无法找到一种方法,您可以使用打字稿来猜测您想要使用哪个UserActions成员。