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
};