具有且仅有一个属性的对象的类型

2023-12-02

我想要一种对象类型,该类型具有且仅有一个具有任何键和任何类型 T 的属性。

type ObjWithOneProperty<T> // = ?

// OK
const obj1: ObjWithOneProperty<boolean> = {
  property1: true
}

// OK
const obj2: ObjWithOneProperty<boolean> = {
  property2: true
}

// OK (I know tsc wont check this, but it's what I want to express)
const f = (key: string): ObjWithOneProperty<boolean> => {
  let obj = {}
  obj[key] = true
  return obj
}

// Type error
const obj2: ObjWithOneProperty<boolean> = {}

// Type error
const obj3: ObjWithOneProperty<boolean> = {
  property1: true,
  property2: true
}

这在打字稿中可能吗?


interface IPropertyOne<T> {
    property1: T;
}

// OK
const obj1: IPropertyOne<boolean> = {
  property1: true
}

// Type error
const obj2: IPropertyOne = {}

// Type error
const obj3: IPropertyOne<boolean> = {
  property1: true,
  property2: true
}

这是静态密钥版本,您想要动态密钥吗?

编辑:动态密钥版本

export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void)
    ? I
    : never;
type IsUnion<T> = [T] extends [UnionToIntersection<T>] ? false : true;
type ISingleKey<K extends string, T> = IsUnion<K> extends true ? "Can only contain a single key" : Record<K, T>;

// OK
const obj1: ISingleKey<"property1", boolean> = {
  property1: true
}

// Type error
const obj2: ISingleKey<"property1", boolean> = {}

// Type error
const obj3: ISingleKey<"property1", boolean> = {
  property1: true,
  property2: true
}

// Type error 2 keys.
const obj4: ISingleKey<"property1" | "property2", boolean> = {
  property1: true,
  property2: true
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有且仅有一个属性的对象的类型 的相关文章

随机推荐

  • 如何使用boost序列化进行二进制输出?

    函数 boost serialization binary object void t size t size 和 boost serialization make binary object void t size t size 之间有什
  • 排序时间总是与第一次排序不同

    我写了情侣排序算法 我想比较他们的排序时间 至少是差不多 但在第一次循环之后 除了 StoogeSort 之外 所有排序时间都减少了 我认为可以在后台进行一些优化 但我应该考虑哪种措施 第一个还是其他 为什么会发生这种情况 public s
  • 最大大小未知时的 MatLab 内存分配

    我正在尝试加快我在 Matlab 中编写的脚本的速度 该脚本动态地将内存分配给矩阵 基本上是从文件中读取一行数据并将其写入矩阵 然后读取另一行并为更大的矩阵分配更多内存 存储下一行 我这样做而不是使用 Zeroes 或其他东西预分配内存的原
  • 分析 C++ 编译过程

    我倾向于编写相当大的模板化标头 C 库 而我的用户经常抱怨编译时间 经过思考这个问题 我突然想到我不知道时间都去哪儿了 是否有一些简单的方法来分析常见编译器的 C 编译过程 例如GCC g 英特尔 C 编译器 icc and XL C C
  • 浏览 FindContours 方法找到的轮廓层次结构?

    对于直接使用 OpenCV 的 C 开发人员来说 这一定很简单 然而我使用的是 Emgu NET 的 OpenCV 包装器 在最新版本中我们有这个方法CvInvoke FindContours返回void 输出结果通过参数引用传递 类型为V
  • 新存储库仅包含当前跟踪文件的复制历史记录

    我们当前的存储库有数以万计的提交 并且一个新的克隆传输了近 GB 的数据 有很多 jar 文件已在历史记录中删除 我们希望通过创建一个新的存储库来减小此大小 该存储库仅保留存储库中当前活动文件的完整历史记录 或者可能只是修改当前存储库以清除
  • Tango 图像帧的计时问题

    当我尝试同时获取深度数据 图像数据和姿势数据时 Tango 似乎正在丢弃图像帧 我正在尝试捕获深度和图像帧并将它们与姿势数据同步 使用 C point cloud jni example 我添加了代码将点云数据转储到内存缓冲区 然后转储到文
  • (Libgdx 1.6.1) BitmapFontCache.draw 由于索引越界而崩溃

    我最近刚刚将 Libgdx 项目从 1 4 x 更新到 1 6 1 我在游戏中的对话中使用 BitmapFontCache 使用 BitmapFontCache draw start end 逐个字符地绘制字符串 这在 1 4 x 中工作正
  • 将 Maya 模型导入 iPhone

    做这个的最好方式是什么 谷歌搜索向我展示了很多方法 但目前最好的方法是什么 我很高兴能从 Maya 导出模型并在 iPhone 屏幕上渲染 但如果有一种方法可以渲染它 然后支持捏合缩放等 我会很兴奋 非常感谢 今天刚刚完成我的第一堂 3D
  • 在 Racket 中将字符串转换为数字

    I used read从文件中获取一行 文档说read回报any 那么它会将线变成字符串吗 我在转动琴弦时遇到问题 1 到号码1 or 500 8232 into 500 8232 我还想知道 Racket 是否可以直接从文件中读取数字 看
  • md-items 未在 md-autocomplete Angular Material 中正确更新建议列表

    我正在使用 md autocomplete 因为 md items 没有正确更新从服务主机 Ajax 调用获取的响应列表 HTML 源代码
  • 可以根据端口路由 Kubernetes 入口资源吗?

    我有一个 Kubernetes 服务 它公开两个端口 一个用于外部接口 目标端口 8080 一个用于管理接口 目标端口 8081 我想使用 https 通过互联网访问这两个端点 因此我想我想使用入口资源 入口资源为负载均衡器创建静态 IP
  • 如何在此处地图中执行地图标记单击(android)

    我正在使用地图 我发现一个问题 我如何知道点击了哪个标记 Override public boolean onMapObjectsSelected List
  • 从另一个应用程序打开应用程序 (iOS)

    我读到没有像 iOS 版的 NSWorkspace 这样的东西 相当于 iOS 的 NSWorkspace 不幸的是 我希望我的应用程序中有一个可以运行其他一些应用程序 在后台 的按钮 没有 NSWorkspace 可以吗 您的第一个问题是
  • 重新启动集群时连接消费者作业被删除

    我在更改与 kafka 相关的一些属性并重新启动集群时面临以下问题 In kafka Consumer there were 5 consumer jobs are running 如果我们进行一些重要的属性更改 并且在重新启动集群时 某些
  • 如何设置DelayQueue的延迟

    我刚刚开始用java编码 我正在努力设置一个DelayQueue 我就想拥有它 DelayQueue queue new DelayQueue If counter gt 0 queue offer Integer A custom del
  • C 结构体自动初始化值、数组初始化

    如果我有两个结构 typedef struct int number of lines char lines MAX CHAPTER LINES MAX STR SIZE 1 Chapter typedef struct char name
  • 图表不显示在 angular2 组件中

    我正在尝试使用 Chart js 在 Angular2 组件中构建图表 到目前为止我还没有成功 该图表显然已构建但未显示 canvas 元素的宽度和高度为空
  • 使用 Boost Graph [BGL] 检查 add_edge 之前顶点是否已存在

    有没有办法检查使用 Boost 创建的图中的顶点是否已经存在 而不是循环遍历顶点 如果它已经存在 如何使用其顶点描述符添加新边 Example Graph g vertex v v add vertex 1 g vertex name v
  • 具有且仅有一个属性的对象的类型

    我想要一种对象类型 该类型具有且仅有一个具有任何键和任何类型 T 的属性 type ObjWithOneProperty