【发布时间】:2020-02-22 02:04:04
【问题描述】:
假设我有一些元组类型:
type SomeTuple = ["a", "b", "c"];
现在我想以某种方式将它的键作为数字:
type SomeTupleKeys<T = SomeTuple> = 0 | 1 | 2;
我尝试使用keyof SomeTuple,但它返回
号码 | "0" | "1" | "2" | “长度” | "toString" | "toLocaleString" | “流行” | “推” | “连接” | “加入” | “反向” | “转移” | “切片” | “排序” | “拼接” | “不换档” | “索引” | ... 14 更多... | “价值观”
我也尝试过更复杂的解决方案
type B = (SomeTuple extends infer T ? { [K in keyof T]: K extends keyof T ? K : never } : never)[number];
但是这个给了我字符串:
"0" | "1" | “2”
有没有办法在不进行硬编码的情况下获取数字?
【问题讨论】:
-
为什么需要这个?
SomeTuple[1]和SomeTuple["1"]挑出同一个元素;是否有一些用例需要数字而不是字符串? -
@jcalz,
{ [key in TupleKeys]: { length: key } }- 我在length属性中遇到了字符串问题... -
“没有硬编码任何东西”?可能没有任何支持的方式。你可以使用递归类型来增长一个元组直到它的长度匹配,但这比你索引到的像
[0,1,2,3,4,5,6,7,8,9,10,11,12,...]这样的大元组更密集。 -
@jcalz,我其实不知道怎么做递归类型...
-
查看here获取相关答案,其中映射元组的字符串键
"0"、"1"、...被转换为数字类型以使它们与元组@相当987654335@ 数字财产。但我仍然会称其为 hacky,因此这里也没有硬编码的简单解决方案。
标签: typescript generics tuples