TypeScript 映射类型:获取数组的元素类型
TypeScript Mapped Types: Get element type of array
假设容器类型的数组属性为 unknown/generated 类型 T1
、T2
等(简称 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
};
假设容器类型的数组属性为 unknown/generated 类型 T1
、T2
等(简称 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
};