如何动态创建基于另一个接口的接口属性?

时间:2021-03-17 16:37:20

标签: typescript

我想基于另一个接口创建一个接口。

假设我有一个如下所示的数据接口:

interface SimpleData {
    uid: number;
    name: string;
    email: string;
}

我想创建另一个接口来表示一个经过验证的 SimpleData 对象,如下所示:

interface ValidatedSimpleData {
    uid: { value: SimpleData["uid"], error: boolean };
    name: { value: SimpleData["name"], error: boolean };
    email: { value: SimpleData["email"], error: boolean };
}

有没有办法根据ValidatedSimpleData中定义的属性动态创建SimpleData的属性?

1 个答案:

答案 0 :(得分:1)

您通过 mapped types 执行此操作。

<块引用>

映射类型是一种泛型类型,它使用通过 keyof 创建的联合来迭代一种类型的键以创建另一种类型:

interface SimpleData {
    uid: number;
    name: string;
    email: string;
}

type Validated<T> = {
    [K in keyof T]: {
        value: T[K],
        error: boolean
    }
}

type ValidatedSimpleData = Validated<SimpleData>;

Playground