typescript - 通过使用变量索引对象接口来获取类型
Posted
技术标签:
【中文标题】typescript - 通过使用变量索引对象接口来获取类型【英文标题】:typescript - get type by indexing object interface with variable 【发布时间】:2020-09-02 06:35:18 【问题描述】:您好,我想用变量索引对象接口
这是我的界面:
interface OptionsRedux
default_route: DefaultRoute[];
insurance_company: InsuranceCompany[];
marital_status: MaritalStatus[];
reason: Reason[];
termination_reason: TerminationReason[];
type optionGroupTypes = keyof OptionsRedux;
现在我的代码如下所示:
interface GetOptions
type: ActionTypes.getOptions,
payload: group: optionGroupTypes, values: OptionsRedux[optionGroupTypes]
export const getOptions = (
group: optionGroupTypes,
values: OptionsRedux[optionGroupTypes]
): GetOptions => (
type: ActionTypes.getOptions,
payload: group, values ,
);
这给了我有效载荷值的类型:
DefaultRoute[] | InsuranceCompany[] | MaritalStatus[] | Reason[] | TerminationReason[]
但我想做这样的事情:
interface GetOptions
type: ActionTypes.getOptions,
payload: group: optionGroupTypes, values: OptionsRedux[group]
这让我知道该组是未定义的。
我的目标是,当我使用函数 getOption("default_route", values) 时,值必须是:
DefaultRoute[]
有什么想法吗?找不到任何可行的方法
【问题讨论】:
【参考方案1】:这是创建部分界面的正确方法
interface IPerson
firstname: string,
lastname: string,
[key: string]: any
创建 IPerson 类型的对象
const person: IPerson
firstname: 'John',
lastname: 'Doe',
phonenummber: 82184
希望对你有帮助
【讨论】:
【参考方案2】:您可以使用泛型来实现这一点。扩展您的示例:
interface GetOptions<T extends optionGroupTypes>
type: ActionTypes.getOptions,
payload: group: T, values: OptionsRedux[T]
export const getOptions = <T extends optionGroupTypes>(
group: T,
values: OptionsRedux[T]
): GetOptions<T> => (
type: ActionTypes.getOptions,
payload: group, values ,
);
通过添加泛型类型T
,group
和values
类型彼此保持同步。 T
是具体选择的类型,而不是所有类型的联合。
【讨论】:
以上是关于typescript - 通过使用变量索引对象接口来获取类型的主要内容,如果未能解决你的问题,请参考以下文章