我正在尝试找到在 TypeScript 中键入逻辑 Dictionary 对象的正确方法。 Record
和 Partial
组合的类型无法按照我希望的方式工作——我的“想要”是表现得像其他语言中可用的普通字典/ map 。
给定一个 dict: Dictionary<K,V>
我要:
-
dict.key
具有类型undefined|V
因为 key 可能不存在 -
Object.values(dict)
具有类型Iterable<V>
-
Object.entries(dict)
具有类型Iterable<[K, V]>
-
Object.keys(dict)
具有类型Iterable<K>
Record<K,V>
不起作用,因为按键访问总是产生值类型 V
,即使 key 可能不存在。
Partial<Record<K,V>>
不起作用,从那以后Object.values
返回类型 Iterable<V|undefined>
如何正确定义 Dictionary
适用于标准 JS 对象的类型?
如果我必须覆盖 Object.values/entries/keys
的定义也没关系对于字典类型。我不清楚如何覆盖 Object
仅针对特定类型的函数。
注意:我在这里了解这些类型的很多历史。我有兴趣找到一个可行的解决方案。上面的 Dictionary 是一种常见的类型范例,可用于多种语言,因此我希望它可以在 TypeScript 中使用。
最佳答案
目前似乎没有办法在 TypeScript 中正确建模字典类型。
A question在 TypeScript 项目上指示 noUncheckedIndexedAccess
作为一个选项,但这是一个超越记录的全局标志,并且还标记了一些有效的数组使用。
关于typescript - 在 TypeScript 中处理不显示未定义迭代的部分记录的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67717350/