typescript - 在 TypeScript 中处理不显示未定义迭代的部分记录的正确方法?

标签 typescript

我正在尝试找到在 TypeScript 中键入逻辑 Dictionary 对象的正确方法。 RecordPartial组合的类型无法按照我希望的方式工作——我的“想要”是表现得像其他语言中可用的普通字典/ 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/

相关文章:

javascript - 如何创建这个递归任意对象?

typescript - 是否可以在 aurelia View 模型中指定项目根目录的路径?

javascript - 在 D3 Hierarchy Typescript 中,每个父子对具有相同的颜色

typescript - 如何从装饰器中的装饰属性解析属性值的通用类型

javascript - 从 Angular 字符串中删除特殊字符

javascript - 在 TypeScript 中使用三个 Js + OrbitControl

typescript - 根据具有默认值的参数返回 Promise 或 boolean 值

typescript - 如何在接口(interface)上扩展属性

javascript - 使用嵌套数组属性中的对象过滤对象数组

typescript - 为什么我不能在 TypeScript 中将 `typeof x` 与 "null"或 "MyClass"进行比较?