给定函数
function invert(arr: string[]) {
let result = {};
arr.forEach((x, i) => {
result[x] = i;
})
return result; // insert type cast here
}
基本上,我在寻找的是一种VSCode中的intellisense方法,它确切地告诉我在结果对象中有哪些属性可用,因此给定const example = invert(['foo', 'bar', 'baz'])
自动完成应显示以下内容:
我目前的方法涉及到转换result as {[K in T[number]]: K}
,其中T
是typeof arr
的别名,但是这种方法没有给予任何自动完成功能。
我写什么来让TypeScript显示这些东西?
接口{[name]: number}
仅仅是一个简化的例子(出于保密协议的原因),如何将数组Map到属性名的主要问题仍然是所有问题的核心。
2条答案
按热度按时间oyxsuwqo1#
如果您愿意使用
as const
定义数组,这是一个可行的解决方案jk9hmnmh2#
正如前面的注解所指出的,实现这一点的一种方法是使
invert
成为泛型。目前arr
只是一个string[]
。这就是为什么您的Map类型不起作用。这个简单的泛型实作会产生
Record<T, number>
,其中T
包含数组内的索引键。Playground
这是可行的,但我们仍然可以改进一下。目前,键只输入为
number
,即使我们确切地知道 * 哪个 * 数字。在这个实现中,我们直接Map
T
的元素,过滤掉数字键,然后把索引K
转换成数字。这会产生下列传回型别:
Playground