在 TypeScript 中,我有时会使用期望(或返回)对象的函数,其中这些对象被视为字典。基本上我的问题是:这里使用的正确类型是什么?
我可以用
Record<string, any>
但我没有找到这个建议。相反,每个人都建议使用
{ [ key: string ]: any }
但如果我这样做并稍后尝试访问一个属性,它的类型是any,但它应该是any |不明确的。 IOW,这种类型表明对于any给定的键将会有一个值(这当然是错误的)。
我们现在最终创建了自己的字典类型:
type Dictionary<K extends string, T> = {
[key in K]?: T;
}
然而,考虑到这应该是一个非常常见的要求,这对于我们想要实现的目标来说似乎是开销。
当然也可以只使用
{}
但这也允许使用数组,这是不需要的。
你如何正确解决这个问题?
PS:另一种选择可能是使用
{ [ key: string ]: any | undefined }
但这又显得很麻烦。
PPS:这些例子并不完美,因为任何当然都包含未定义的内容。在这里考虑任何其他类型,例如数字词典。
这个问题似乎至少有两个部分,所以尝试分开回答:
方式{ [ key: string ]: any }
通常是正确的,并且值不需要写成any | undefined
,因为any
类型是父级undefined
, so any | undefined
减少到只是any
到底。
然后正如泰勒在评论中指出的那样,你的类型Dictionary
涵盖了一个常见的用例,这就是为什么它在标准库中的实现几乎完全像这样Record
。所以,是的,这是一个常见的要求,也是对此的常见答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)