我的类型是
type MyType = {
x: number
y: string
}
我想要一种将字段列表转换为如下类型的类型(例如Mapper
)
type TypeOfArray = Mapper<['x', 'y']>
以这种方式构造TypeOfArray
与
type TypeOfArray = [number, string]
在Typescript 3.5中可能吗?我一直在玩映射元组,但无济于事
答案 0 :(得分:2)
是的,我可能会这样写:
type GenericMapper<T, KS> = {
[K in keyof KS]: KS[K] extends keyof T ? T[KS[K]] : never
};
这将使用类型T
和键KS
的对象/数组,并使新的对象/数组具有与KS
相同的形状,但其值将替换为相应的属性来自T
(如果没有对应的属性,则返回never
)。是mapping over KS
,自TS3.1起也是works for tuples。
重要的一点可能是嵌套的property lookup type,T[KS[K]]
。对于K
的每个键KS
,我们采用KS[K]
属性,我们希望它是T
的某个键,(它将为MyType
(在您的情况下),然后在T
中进行查找以获取T[KS[K]]
。如果T
是MyType
,并且KS
是["x","y"]
,并且K
是"0"
,则KS[K]
是{{1} },而"x"
是T[KS[K]]
是T["x"]
。
然后您的number
就像
Mapper
您会看到它按预期运行:
type MyType = {
x: number
y: string
}
type Mapper<KS> = GenericMapper<MyType, KS>;
不确定这是否满足您的所有用例,但希望它可以给您一个思路,以进行下一步。好的,希望能有所帮助;祝你好运!