gpt4 book ai didi

javascript - TypeScript 中的类字典对象使用什么类型?

转载 作者:搜寻专家 更新时间:2023-10-30 21:44:50 26 4
gpt4 key购买 nike

在 TypeScript 中,我有时会使用期望(或返回)对象的函数,这些对象被视为字典。基本上我的问题是:在这里使用的正确类型是什么?

我可以用

Record<string, any>

但我在任何地方都找不到这个建议。相反,每个人都建议使用

{ [ key: string ]: any }

但是如果我这样做并稍后尝试访问一个属性,它是任何类型的,但它应该是任何 |不明确的。 IOW,这种类型表明对于任何给定的键都会有一个值(这当然是错误的)。

我们现在最终创建了自己的字典类型:

type Dictionary<K extends string, T> = {
[key in K]?: T;
}

然而,这似乎是我们想要实现的开销,因为这应该是一个非常普遍的要求。

当然也可以直接用

{}

但这也允许数组,这是不需要的。

你是如何正确解决这个问题的?

PS:另一种选择可能是使用

{ [ key: string ]: any | undefined }

但这又显得很麻烦。

PPS:这些例子并不完美,因为任何当然包括未定义。想想这里的任何其他类型,例如数字字典。

最佳答案

这个问题好像至少有两部分,所以试着分开回答:

类型{ [ key: string ]: any 通常是正确的,值不需要写成any | undefined,因为 any 类型是 undefined 的父类型,所以 any | undefined 最后减少为 any

然后正如 Tyler 在评论中指出的那样,您的类型 Dictionary 涵盖了一个常见的用例,这就是为什么它在标准库中几乎完全像这样实现为 Record。所以是的,这是一个常见的要求,这是一个常见的答案。

关于javascript - TypeScript 中的类字典对象使用什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57336063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com