TypeScript映射类型:获取数组的元素类型

时间:2017-06-30 13:58:07

标签: typescript mapped-types

假设容器类型的数组属性为未知/生成类型T1T2等(短T*):

interface MultiContainer
{
    Item1: T1[];
    Item2: T2[];
    ...
}

是否可以使用maped types派生以下类型:

interface SingleContainer
{
    Item1: T1;
    Item2: T2;
    ...
}

我正在寻找一些表达方式:

type SingleContainer =
    { [ P in keyof MultiContainer ]: MultiContainer[P] }
                                            └─────────── returns T*[] instead of T*  

MultiContainer[P]返回类型T*[],但我需要一个返回T*的表达式

提前致谢!

2 个答案:

答案 0 :(得分:2)

我相信这可以满足您的需求:

type SingleContainer = {[P in keyof MultiContainer]: MultiContainer[P][0]}

答案 1 :(得分:1)

从TS 2.8开始,可以使用infer关键字:

type SingleContainer = {
  [P in keyof MultiContainer]: MultiContainer[P] extends (infer T)[] ? T : never
};