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

TypeScript Mapped Types: Get element type of array

假设容器类型的数组属性为 unknown/generated 类型 T1T2 等(简称 T*):

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

是否可以使用 mapped types 导出以下类型:

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

我正在寻找类似这样的表达式:

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

MultiContainer[P]returns 类型 T*[] 但我需要一个表达式 returns T*

提前致谢!

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

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

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

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