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

TypeScript映射类型:获取数组的元素类型,typescript,mapped-types,Typescript,Mapped Types,假设容器类型的数组属性为未知/生成的类型T1,T2等(简称T*): 是否可以使用以下公式导出以下类型: 我在寻找一些表达方式,比如: type SingleContainer = { [ P in keyof MultiContainer ]: MultiContainer[P] } └─────────── returns T*[] instead of T* MultiContainer[p

假设容器类型的数组属性为未知/生成的类型
T1
T2
等(简称
T*
):

是否可以使用以下公式导出以下类型:

我在寻找一些表达方式,比如:

type SingleContainer =
    { [ P in keyof MultiContainer ]: MultiContainer[P] }
                                            └─────────── returns T*[] instead of T*  
MultiContainer[p]
返回类型
T*[]
,但我需要一个返回
T*


提前谢谢

我相信这正是您所需要的:

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

从TS 2.8可以使用
推断
关键字:

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

真是天才!这允许您构造一个
Flat
type:
type Flat={[P in keyof T]:T[P]扩展(推断a)[]?a:T[P];}
。用法:
接口混合容器{Item1:T1;Item2:T2[]};类型FlatContainer=Flat;//{Item1:T1;Item2:T2}
插入一些字符串模板键入,您甚至可以从
{Items:T1[]}
转到
{Item:T1}
type SingleContainer = {[P in keyof MultiContainer]: MultiContainer[P][0]}
type SingleContainer = {
  [P in keyof MultiContainer]: MultiContainer[P] extends (infer T)[] ? T : never
};