将打字稿界面映射到相关界面

时间:2018-07-29 23:05:14

标签: typescript typescript-generics

说我有一个打字稿界面:

interface IOriginal {
    aaa: string;
    bbb: boolean;
}

...,现在我要创建一个具有相同键但值不同的相似接口(在我的特定情况下,值是使用Redux的Reducer泛型派生的,但我想将答案保持在相当一般的水平) ):

import { Reducer } from "redux";
interface IDerived{
    aaa: Reducer<string>;
    bbb: Reducer<boolean>;
}

问题:如何在不显式重新键入所有键值对(违反DRY并有两个地方更新内容)的情况下直接从IDerived生成IOriginal?如果这些是对象,我可以这样做:

const derived = original;
for(var key in derived) derived[key] = Reducer(original[key]);

...但是我不确定在处理类型/接口时是否有等效的工具。

1 个答案:

答案 0 :(得分:4)

您正在寻找mapped type

type IDerived = { [K in keyof IOriginal]: Reducer<IOriginal[K]> };