Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 将类型的字段列表映射到数组类型_Typescript_Typescript Generics - Fatal编程技术网

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]
。是的,我想这取决于用例。这看起来很棒!我发现我在尝试中遗漏了两个要素:嵌套查找和条件查找。谢谢