Typescript 将类型的字段列表映射到数组类型
我有一种Typescript 将类型的字段列表映射到数组类型,typescript,typescript-generics,Typescript,Typescript Generics,我有一种 type MyType = { x: number y: string } 我想要一个类型(比如说Mapper),它可以将字段列表转换为如下类型 type TypeOfArray = Mapper<['x', 'y']> 这在Typescript 3.5中是否可能?我一直在玩映射元组,但没有用是的,我可能会这样写: type GenericMapper<T, KS> = { [K in keyof KS]: KS[K] extends keyof
type MyType = {
x: number
y: string
}
我想要一个类型(比如说Mapper
),它可以将字段列表转换为如下类型
type TypeOfArray = Mapper<['x', 'y']>
这在Typescript 3.5中是否可能?我一直在玩映射元组,但没有用是的,我可能会这样写:
type GenericMapper<T, KS> = {
[K in keyof KS]: KS[K] extends keyof T ? T[KS[K]] : never
};
您可以看到它的工作原理与您预期的一样:
type TypeOfArray = Mapper<['x', 'y']>
//type TypeOfArray = [number, string]
TypeOfArray=Mapper类型
//类型TypeOfArray=[数字,字符串]
不确定这是否满足您的所有用例,但它应该有希望给您一个如何继续的想法。好吧,希望这会有帮助;祝你好运
是的,我可能会这样写:
type GenericMapper<T, KS> = {
[K in keyof KS]: KS[K] extends keyof T ? T[KS[K]] : never
};
您可以看到它的工作原理与您预期的一样:
type TypeOfArray = Mapper<['x', 'y']>
//type TypeOfArray = [number, string]
TypeOfArray=Mapper类型
//类型TypeOfArray=[数字,字符串]
不确定这是否满足您的所有用例,但它应该有希望给您一个如何继续的想法。好吧,希望这会有帮助;祝你好运
不错!如果您添加
KS extends(keyof T)[
,那么它也只允许您选择T
上实际存在的属性,因此Mapper
是一个错误,而不是[never]
。是的,我想这取决于用例。这看起来很棒!我发现我在尝试中遗漏了两个要素:嵌套查找和条件查找。谢谢不错!如果您添加KS extends(keyof T)[
,那么它也只允许您选择T
上实际存在的属性,因此Mapper
是一个错误,而不是[never]
。是的,我想这取决于用例。这看起来很棒!我发现我在尝试中遗漏了两个要素:嵌套查找和条件查找。谢谢