4

Suppose having a container type with array properties of unknown/generated types T1, T2, etc. (short T*):

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

Is it possible to derive the following type using maped types:

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

I'm looking for some expression like:

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

MultiContainer[P]returns the types T*[] but I need an expression that returns T*

Thanks in advance!

4

2 回答 2

3

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

type SingleContainer = {[P in keyof MultiContainer]: MultiContainer[P][0]}
于 2017-06-30T14:50:04.337 回答
2

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

type SingleContainer = {
  [P in keyof MultiContainer]: MultiContainer[P] extends (infer T)[] ? T : never
};
于 2020-11-03T17:58:04.203 回答