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

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(使用前将#替换为@)

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

  • `type Constructor = Function and {prototype: T }` 如何应用于 TypeScript 中的抽象构造函数类型?

    TypeScript 中有一个关于抽象构造函数类型的问答 这是我想知道答案的问题 TypeScript 中的抽象构造函数类型 https stackoverflow com questions 36886082 abstract const
  • 从联合类型映射多个兼容类型

    我正在开发一个应用程序 我们已经定义了一个类型 并且需要从该单个接口中推导出多个接口 Example 我们的主要类型看起来像这样 该类型是否定义为映射类型或联合类型并不重要 因此最简单的解决方案都是最好的 type A type A inp
  • 与 webpack 捆绑后,无法读取枚举的未定义属性

    我有一个 React 库 我想使用 Webpack 来构建它 该库是使用 Typescript 编写的 似乎一切正常 但由于某种原因枚举却不起作用 当我将库安装到我的 React 应用程序中时 我发现Cannot read properti
  • Angular 6 http.delete 请求不起作用

    我似乎无法让我的删除请求发挥作用 我已经完成了所有的获取请求 但现在我被困在删除上 似乎无法理解它 console log 的 URL 始终正确 并且删除请求通过 Postman 工作正常 有什么想法吗 HTML
  • 如何为 Angular 4、5 中的动态元素分配哈希 ID ref id

    如果我的问题很愚蠢 我很抱歉 我有 30 多个静态 ng container 和一些独特的静态 hashtagID 但我想在 ngFor 的帮助下动态创建它们 public lists food book cook 期望输出
  • 使用字符串枚举来扩展 keyof

    我在理解使用字符串枚举来索引类型时的行为时遇到了一些困难 似乎有时 TS 会识别字符串枚举的值是keyof某些类型 有时则不然 为了显示 enum Key FOO foo type MyObj foo string 因此 类型属性的枚举 即
  • Angular 没有 NameService 提供者

    我在将类加载到 Angular 组件中时遇到问题 我已经尝试解决这个问题很长时间了 我什至尝试过将所有内容合并到一个文件中 我所拥有的是 应用程序 ts
  • 打字稿 - 找不到导出

    我在模块 A 中有这个 Typescript 文件 somefile tsx import remAuto from tidee life theme 在模块 B 中 我导出了 index js 文件remAuto index js imp
  • 存在函数依赖关系时类型推断如何工作

    考虑下面的代码 LANGUAGE MultiParamTypeClasses FlexibleInstances FunctionalDependencies UndecidableInstances FlexibleContexts cl
  • Scala Array.apply 有何魔力

    来自 scala 2 10 4 的 array scala Array定义为 final class Array T length Int extends java io Serializable with java lang Clonea
  • “ReactNode”不是有效的 JSX 元素

    我有以下代码 代码沙箱 https codesandbox io s react typescript forked 50beyp file src App tsx import ComponentType ReactNode from r
  • 打字稿标记的枚举获取值

    我在下面标记了枚举 enum PermissionEnum SU 1 lt lt 0 1 Administrator 1 lt lt 1 2 User 1 lt lt 2 4 对于给定值 6 我怎样才能得到 string gt 管理员 用户
  • Typescript 和 Mongoose - “this”在实例方法中不可用

    我目前正在将我的 API 从 JS 转换为 TS 然而 我在猫鼬和打字稿方面遇到了一些困难 具体来说 this在我的实例方法中不可用 My code AccountSchema methods comparePassword async f
  • Svelte:无法识别导入的 TypeScript 文件

    我正在尝试使用 Rollup 使用 Svelte 和 TypeScript 构建一个应用程序 当我尝试构建我的 Svelte 组件时 我似乎无法让它编译我的 ts包含的文件 svelte成分 我不断收到此错误 Error Unexpecte
  • 如何将 zingchart 实现到 Angular2 中

    我有一个现有的项目 我想在其上实施 zingcharts 我尝试了 3 个不同的教程 主要来自 https blog zingchart com 2016 07 19 zingchart and angular 2 charts back
  • 角度2中未定义的值

    我正在创建一个应用程序 在其中使用 Ag Grid api 在网页上列出我的数据库内容 Ag grid 有一个预定义的 api 来获取所选行的内容 这是我的代码 export class customer entryComponent pu
  • 在Python中检测re(regexp)对象

    我想知道什么是正确的 pythonic 向后和向前兼容的方法如何检查对象是否已编译re object isinstance方法不能轻易使用 而生成的对象声称是 sre SRE Pattern object gt gt gt import r
  • D3、TS 和 Angular 2

    我正在尝试将 D3 v4 与 Angular 2 Typescript 一起使用 我目前正在研究 D3 v4 我能够遵循 stackoverflow 中类似问题的一些答案 但没有成功 我已经导入了大部分 D3 库及其类型 我使用的是 TS
  • 将 Backbone 结构转换为 TypeScript

    看看 Backbonejs 的实现扩展功能 http backbonejs org docs backbone html section 186 它表明它不是一个基本的原型扩展 当主干扩展直接转换为 TypeScript 类时 有些东西会停
  • 使用打字稿的 Angular 6 的黄金布局?

    我在用黄金布局 https golden layout com 与 Angular 6 一起 如下本教程 https npm taobao org package embedded enterprises ng6 golden layout

随机推荐

  • 如何使用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