动态根据其他键的值来确定接口键

时间:2018-11-06 15:58:55

标签: angular typescript

我需要根据接口的另一个键的值创建动态键。

例如:

export interface IForm {
    form_control: string;
    based on the value of the form_control: string;
}

const form: IForm = {
    form_control: 'name',
    name: 'sample'
}

我只想通过接口来做到这一点,并且我不想创建类来实现这一点。 有什么办法吗?

1 个答案:

答案 0 :(得分:2)

您将要为IForm使用generic类型以表示约束。这是一种实现方法:

export type IForm<K extends string> = { form_control: K } & Record<K, string>;

使用内置的Record<K, V>类型,表示具有K键和值V的类型。

然后,要声明类型IForm<K>的变量而不必手动指定K的值,可以通过创建如下的辅助函数来使用类型实参推断:

const asIForm = <K extends string>(iForm: IForm<K>) => iForm;

并像这样使用它:

const form = asIForm({
  form_control: 'name',
  name: 'sample'
}); // inferred as type IForm<"name">

希望有帮助。祝你好运!