如何在打字稿中将一个枚举映射到另一个枚举?

2023-11-22

我想将一个具有枚举类型的对象的属性映射到另一个具有其他枚举类型的对象的属性。

我尝试过type1.a as Enum2 or Enum2[type1.a]没有成功。

这是我的简化代码问题:

enum Enum1 {
  N = 0,
  A = 1,
  B = 2
}

enum Enum2 {
  A = 1,
  B = 2
}

interface Type1 {
  a: Enum1;
}

interface Type2 {
  a: Enum2;
}

const type1: Type1 = {
  a: Enum1.A
};

const type2: Type2 = {
  a: type1.a
};

try it

抛出错误:

Type 'Enum1' is not assignable to type 'Enum2'.
(property) Type2.a: Enum2

你需要投射type1.a支持Enum2。为此,您需要使用“类型谓词”。

这是您的代码的示例:

enum Enum1 {
  N = 0,
  A = 1,
  B = 2
}

enum Enum2 {
  A = 1,
  B = 2
}

interface Type1 {
  a: Enum1;
}

interface Type2 {
  a: Enum2;
}

const type1: Type1 = {
  a: Enum1.N
};

function isEnum2(value: any): value is Enum2 {
  let isEnum2 = false;

  for (let key in Enum2) {
    if (Enum2[key] === value) {
      isEnum2 = true;
    }
  }

  return isEnum2;
}

if (isEnum2(type1.a)) {
  const type2: Type2 = {
    a: type1.a
  };
}

try it

当。。。的时候isEnum2函数用于if阻止道具type1.a成为类型Enum2里面if仅阻止。

Note:您可以替换中的内容isEnum2 using for..in如果您使用的是 ES2017 或更高版本,则循环使用Object.values:

return Object.values(Enum2).includes(value);

try it

有关类型谓词的更多信息

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

如何在打字稿中将一个枚举映射到另一个枚举? 的相关文章

随机推荐

  • 分发时隐藏swift框架中的源代码

    我创建了一个快速框架来分发给私人客户 这是我第一次创建 iOS 框架 所以我对很多事情都一无所知 我的源代码是否有可能被隐藏 我已经到处搜索 但找不到正确的答案 我不确定我是否解释得很彻底 但为了简化起见 我不希望开发人员能够修改或查看我的
  • ChartJS:数据标签:显示饼图中的百分比值

    我有一个带有四个标签的饼图 var data data 50 55 60 33 labels India China US Canada backgroundColor 4b77a9 5f255f d21243 B27200 borderC
  • CoffeeScript:使用instanceof与Class.constructor.name

    如果我有课 class Haha constructor lolAmount 1 gt alert lolAmount 我想检查一个对象是否属于正确的类 使用它是否总是安全的constructor name haha new Haha un
  • 如何在 ggplot2 中将地图与复杂的点显示结合起来?

    我正在尝试用非洲背景地图绘制研究地点的点 我可以独立创建这两个 但我很难将它们叠加在一起 我使用的非洲地图是来自 maplibrary org 的 Esri shapefile 它可以从我的保管箱中获得 https www dropbox
  • 将文件分区为日期从 kafka 写入 hdfs 的最有效方法是什么

    我正在开发一个应该通过 kafka 写入 hdfs 的项目 假设有一个在线服务器将消息写入kafka 每条消息中都包含时间戳 我想创建一个作业 其输出将是根据消息中的时间戳的一个或多个文件 例如如果kafka中的数据是 ts 01 07 2
  • 在 Windows 上部署 FireMonkey 的最低要求

    Windows 计算机运行 FireMonkey 开发的应用程序的最低要求是什么 它可以运行任何可以运行 VCL 应用程序的机器吗 具体可以在XP上运行吗 来自文档 Windows 要求 GPU 必须支持 Pixel Shader 2 0
  • 在 R 矩阵中添加新列

    我有一个包含 1 列的矩阵 gt Control Title name vehicle scan id4 153 CL2004060801AA 155 CL2004060801AA 232 EC2004102602AA 我想添加一个新列 名
  • istringstream - 如何做到这一点?

    我有一个文件 a 0 0 b 1 1 c 3 4 d 5 6 使用 istringstream 我需要先获取 a 然后获取 b 然后获取 c 等等 但我不知道该怎么做 因为网上或我的书中没有好的示例 到目前为止的代码 ifstream fi
  • 对于每个函数,循环遍历特定命名的工作表

    我正在尝试找出编写宏的正确方法 该宏将遍历 12 个具有特定名称 一月 二月 十二月 的工作表 我想也许for each将是一个不错的选择 所以我尝试了以下方法 dim crntSht as worksheet set crntsht Ja
  • 在 C# 中编写 XML - “Epilog 状态下的令牌 StartElement 将导致无效的 XML 文档”错误

    我正在尝试写入 XML 文档 从列表的 ArrayList 中获取数据 for int i 0 i lt 15 i string headname headers 0 as List
  • 如何提取 lmer 输出的固定效应部分的相关性

    当你有一个包含大量因素和相互作用的多级模型时 固定效应矩阵的相关性的大小可能会变得相当大且不清楚 我可以使用symbolic cor Tprint 方法中的参数可以更清晰地打印摘要 如下所示 ratbrain lt within read
  • CSS 边框不出现

    我正在尝试设置导航菜单设计的样式以反映 timeanddate com 上的菜单 如下图所示 为了创建颜色 他们在 CSS 中使用了简单的底部和左侧边框 我正在尝试为我的边框添加边框 li 我的网站沙盒上的标签 http www escap
  • 从属性文件创建 Spring Boot 动态 Bean

    如何根据application yml文件动态定义bean 例如 YAML 文件如下所示 service host http localhost 8080 account url account content type applicati
  • 在 PowerShell 中写入时锁定文件

    我有一个要求 其中一个进程连续写入特定文件夹中的文件 同时 另一个脚本将文件从该文件夹移动到另一个文件夹 但是 当第一个进程正在写入文件时 不得移动文件 PowerShell中是否有任何进程 函数可以满足这个要求 在 Powershell
  • 在 pyvis 中我总是收到此错误:“AttributeError:'NoneType'对象没有属性'render'”

    我想使用最新版本的 pyvis 和 python 版本 3 9 6 进行网络可视化 from pyvis network import Network g Network g add node 0 g add node 1 g add ed
  • 如何在命名空间内创建私有变量?

    对于我的 Web 应用程序 我正在 JavaScript 中创建一个命名空间 如下所示 var com example com example func1 function args com example func2 function a
  • PermGen 内存不足原因

    我经常在我的环境中检测 PermGen 中的 OOM java 6 jboss 4 2 3 不是一个大型网络应用程序 我知道 String intern 问题 但我没有足够的有价值的用途 MaxPermGen 大小的增加并不费力 从 128
  • 如何输出矩阵维度及其内容?

    是否可以使 GNU Octave 输出矩阵尺寸及其内容 例如 它应该产生某种东西 像这样 octave 1 gt X 1 2 3 4 X 2x2 1 2 3 4 octave 2 gt X 1 ans 1x2 1 2 在 MATLAB 中
  • 在java应用程序中保存用户设置的最佳方法是什么?

    在java桌面应用程序中安全保存用户设置的最佳方法是什么 例如 如果我想保存 Ftp 帐户设置 最好的方法是什么 Thanks The 首选项 API是存储用户和系统首选项的好方法 如果您想存储密码 则必须对其进行加密 这是一篇不错的文章
  • 如何在打字稿中将一个枚举映射到另一个枚举?

    我想将一个具有枚举类型的对象的属性映射到另一个具有其他枚举类型的对象的属性 我尝试过type1 a as Enum2 or Enum2 type1 a 没有成功 这是我的简化代码问题 enum Enum1 N 0 A 1 B 2 enum