TypeScript:将键值类型反向映射到值键

2023-12-03

给定一个类型的对象:

type Key2Value = {
  foo: "bar"
  voo: "doo"
}

假设该类型的值始终是字符串类型,如何构造实用程序类型ReverseMap<T>反向将键值对映射到值键对?

type Value2Key = ReverseMap<Key2Value>
// yields:
type Value2Key = {
  bar: "foo"
  doo: "voo"
}

type Key2Value = {
  foo: "bar"
  voo: "doo"
}

type ReverseMap<T extends Record<keyof T, keyof any>> = {
    [P in T[keyof T]]: {
        [K in keyof T]: T[K] extends P ? K : never
    }[keyof T]
}

type Value2Key = ReverseMap<Key2Value>

操场

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript:将键值类型反向映射到值键 的相关文章

随机推荐

  • 运行 selenium 时如何将参数传递给 google chrome?

    我希望能够在运行 selenium 时将参数传递给 google chrome 我怎样才能做到这一点 当我运行 selenium 时 我使用 Java 命令 Java jar selenium jar 如何将 no sandbox igno
  • 如何从 iOS 应用程序中将视频上传到 YouTube? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 在我的 iOS 应用程序中
  • 如何使用 python 从包含数千个文件的目录中复制前 100 个文件?

    我有一个巨大的目录 并且一直在更新 我试图使用 python 仅列出目录中最新的 100 个文件 我尝试使用 os listdir 但是当目录大小接近 1 00 000 个文件时 listdir 似乎崩溃了 或者我没有等待足够长的时间 我只
  • HashMap 中的键是否存在检查

    检查 HashMap 中的键是否存在总是必要的吗 我有一个包含 1000 个条目的 HashMap 我正在考虑提高效率 如果HashMap的访问非常频繁 那么每次访问时都检查键是否存在将导致很大的开销 相反 如果密钥不存在并因此发生异常 我
  • 如何在 ASP.NET MVC 中禁用会话状态?

    我想要一个非常轻量级的 ASP NET MVC 站点 其中包括删除尽可能多的常用 HttpModule 并禁用会话状态 但是 当我尝试执行此操作时 出现以下错误 The SessionStateTempDataProvider requir
  • 如何在 PHP 中第 n 次出现针时分割字符串?

    必须有一种快速有效的方法来在针的 第 n 次出现处分割 文本 字符串 但我找不到它 里面的功能还是比较齐全的PHP手册中的strpos注释 但这对于我的需要来说似乎有点多了 我有纯文本作为 string并想将其拆分为nth的发生 needl
  • 构造函数 ProcessBuilder(String, String, String) 未定义

    在同一个 IDE Eclipse 中 我有两个项目都有 ProcessBuilder builder new ProcessBuilder cmd exe c command 但在项目一中它没有显示编译错误 但在项目二中它显示编译错误两个
  • 在 Qt 中处理非常大的图像

    我无法让 Qt 处理超过 10 000X10 000 的图像 我正在处理每张大约 2GB 的巨大卫星图像 我考虑过使用内存映射 但图像仍然占用内存空间 QFile file c qt a ras file open QIODevice Re
  • python webbrowser.open(url)

    httpd make server 80 server webbrowser open url httpd serve forever 这可以跨平台工作 除非我在 putty ssh 终端上启动它 我如何欺骗控制台在单独的进程中打开 w3m
  • 为什么原始 numpy 数组在更改从它创建的另一个数组时会发生变化?

    我有一个 numpy 数组r当我用来创建另一个数组时r2从中取出并转动该新阵列r2为零它也改变了原始数组r 我搜索了类似的问题 但没有找到任何令人满意的答案 所以请考虑提出一个合适的答案 原始数组 gt gt gt r array 0 1
  • 从 python 程序中禁用哈希随机化

    从Python 3 3开始 哈希算法是非确定性的salted以避免某种攻击 这对于网络服务器来说很好 但在尝试调试程序时却很痛苦 每次运行脚本时 字典内容都会以不同的顺序迭代 一些早期版本的 python 有一个 R标记为enabling哈
  • 有什么理由在 C++03 中使用“auto”关键字吗?

    Note这个问题最初发布于 2009 年 在 C 11 被批准之前 在auto关键字发生了很大的变化 提供的答案涉及onlyC 03 的含义auto 这是指定的存储类 而不是 C 11 的含义auto 这是自动类型推导 如果您正在寻找有关何
  • unix下隐藏文件的正则表达式

    我正在寻找一个正则表达式来匹配以 开头的每个文件 在一个目录中 我正在使用 CMake 来自 CMake 文档 CMake 需要正则表达式 而不是 glob 并且想要忽略以点开头的每个文件 隐藏文件 但是 or 不起作用 奇怪的是 这有效
  • 使用 ScriptEngine (.NET 3.5) 在 C# 中执行 Selenium python 单元测试时遇到问题

    第一次海报 我正在转向关于堆栈溢出的第一个问题 因为我在尝试寻找答案时发现了很少的资源 我正在寻找从 C 应用程序执行 Selenium python 测试 我不想每次都编译 C Selenium 测试 我想利用 IronPython 脚本
  • 为什么 C++ 中 char 不被视为数字?

    我用 C 编写了一段代码 运行完美 我将其翻译为 C 那里给出了错误的输出 我有一个迭代 我将输入和迭代器变量都用作 char 以节省空间 但表现并不如预期 unsigned char repeat i cin gt gt repeat f
  • 处理日期/时间和时区的奇怪时间偏移

    我一直在尝试编写一些函数来根据谷歌电子表格上多个单元格的信息创建谷歌日历和谷歌日历事件 发布的第一期here日期部分已经得到解决 现在我在时间部分遇到问题 下面的代码 var ss SpreadsheetApp getActiveSprea
  • 有人可以向我解释一下这是什么类型吗? [复制]

    这个问题在这里已经有答案了 我发现了这种排序 有人可以向我解释一下它是什么类型吗 我认为这是选择排序对吗 嵌套循环如何工作 for i 0 i lt N i for j i 1 j lt N j if toSort i gt toSort
  • 数据总是在变化(SQL Server Management Studio)

    我正在使用 SQL Server Management studio 并不断收到相同的错误 摆脱它的唯一方法 通常 是重置 SQL Server 这非常烦人 有时在我的远程计算机上是不可能的 当我向表中添加一行 然后转到 编辑前 200 行
  • 在 PuTTY 中启动 SSH 连接,运行命令,并使会话保持活动状态

    我想每次通过 PuTTY SSH 到服务器时运行一些 shell 命令 我正在连接到由其他人管理的生产 Web 服务器 并且我不想在那里存储我自己的脚本 我看到了这个选项连接 gt SSH gt 远程命令 但是如果我将初始化命令放在那里 启
  • TypeScript:将键值类型反向映射到值键

    给定一个类型的对象 type Key2Value foo bar voo doo 假设该类型的值始终是字符串类型 如何构造实用程序类型ReverseMap