自动初始化 Typescript 中字符串文字类型的成员字段

2023-12-22

如果我有课的话

class Foo {
  type: "foo"
  constructor(public id: number) {}
}

class Bar {
  type: "bar"
  constructor(public id: number) {}
}

type SomeUnion = Foo | Bar // (x : SomeUnion).type will have the type "foo" | "bar"

构造一个实例new Foo(1)将产生{ id: 1 }在运行时,但我想得到{ id: 1, type: "foo" }.

一个简单的解决方案当然是输入字符串常量两次,通过在构造函数中分配它,例如this.type = "class_name".

然而,这是不理想的,因为我需要输入相同的字符串常量两次。这不是什么大事,但这是一种人们可能会忘记并导致错误的事情。

有没有办法自动创建与字符串文字具有相同值的对象成员?


让我们重点关注这段代码:

class Foo {
  type: "foo"
  constructor(public id: number) {}
}

如果编译器选项strictNullChecks is false, then type: "foo"隐式还允许设置type到价值观undefined and null。我希望需要将该字段显式初始化为除undefined是显而易见的。


那么让我们继续strictNullChecks set to true。在这种情况下,唯一可以分配给type is "foo"。看起来您希望有某种方法让编译器执行以下推理:

type: "foo"说字段名为type必须是类型"foo"。因此,只有值"foo"可以分配给它。因此,我应该发出代码来自动将其初始化为"foo"因为没有其他值可以分配给它。

问题是 TypeScript 2.x 即使strictNullChecks目前允许字段以值开头undefined即使分配undefined无效。让我明确地说:即使你不能assign价值undefined to type, 场type can start与价值undefined(如果你没有初始化它)。这不被视为错误。这就是 TypeScript 目前的设计方式。有一个就此问题发布报告 https://github.com/Microsoft/TypeScript/issues/8476,有些人认为这是语言的设计缺陷。

无论如何,编译器不会执行上述所需的推理。现在,无论哪种方式,您都必须重复相同的值作为字符串文字类型的一部分以及作为初始化的一部分。type fields.

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

自动初始化 Typescript 中字符串文字类型的成员字段 的相关文章

随机推荐

  • Power Query 为空时上移值

    目前 我在 Excel 中有一个大表 我想将其与动态下拉列表 级联选项 一起使用 根据您在第一个下拉菜单中所做的选择 然后在下一个单元格中 您应该有一个经过筛选的下拉菜单 此外 任何选项对于所选的主类别都是唯一的 我做的第一件事是获取我需要
  • fsock:无法找到套接字传输“http”

    我想用 fsock 发送后变量 但是当我尝试这个时 post arr array a gt b addr http 1 2 3 4 confirmation html fp fsockopen addr 80 errno errstr 30
  • 使用 CloudFormation 添加对 AWS websocket API 的集成响应

    AWS recently released Cloudformation support for templating websocket API gateways https aws amazon com about aws whats
  • JFreechart 中漂亮的饼图

    是否有可能在 JFreechart 中为饼图获得复杂 漂亮的颜色 我的意思是我怎样才能获得如图所示的颜色link http upload wikimedia org wikipedia commons b bf Ml wiki photo
  • SVG 错误:访问属性“someFunction”的权限被拒绝

    请看一下这个小提琴 http jsfiddle net arasbm Tyxea 14 http jsfiddle net arasbm Tyxea 14 正如你所看到的 我想在 SVG 元素上触发事件时对其进行转换 您可以单击箭头 它应该
  • 复制二进制文件的内容

    我正在设计一个图像解码器 作为第一步 我尝试复制使用 c 即打开文件 并将其内容写入新文件 下面是我使用的代码 while c getc fp EOF fprintf fp1 c c 其中 fp 是源文件 fp1 是目标文件 程序执行时没有
  • 字母数字和 + 字符的正则表达式

    我需要一个仅允许字母数字加上 和 字符的正则表达式 现在我正在使用 w 以下模式将匹配仅包含字母 数字 或 的字符串 包括 或 等国际字符 并且不包括 中包含的 字符 w p L p N 例子 string pattern p L p N
  • Azure AD 的访问令牌颁发者是 sts.windows.net 而不是 login.microsoftonline.com

    我正在尝试验证从 azure Active Directory 获取的访问令牌 我从以下位置获得了令牌https login microsoftonline com my tennant guid v2 0 返回的令牌中的发行者是https
  • 应用程序引擎 + 模块 + Maven 的开发工作流程

    我们最近将我们的应用程序引擎项目按照以下结构转换为模块 这个新的开发工作流程的问题是 我们必须在每次更改时重建 EAR 并重新启动应用程序引擎本地开发服务器 这使得每次我们更改代码并想要测试它时 我们都会浪费 30 秒到一分钟的时间 com
  • PorterDuffXfermode DST_IN 未按预期工作

    因此 我试图加快我们正在做的一些绘制 使用 alpha 透明度绘制弧的一部分 并尝试将整个弧缓存到单独的位图中 并使用 alpha 遮罩有选择地显示它 根据我所做的研究 Android 的 Xfermodes API 演示 这个例子 htt
  • Swagger UI 将身份验证令牌传递给标头中的 API 调用

    我是 Swagger 的新手 我正在使用 Swagger UI 生成 swagger 文档 我有两个 API 调用 第一个调用是根据用户名和密码生成令牌 第二次调用需要第一次调用生成的令牌 如何使用 Swagger UI 设置第二次调用的令
  • 如何创建 AvalonEdit 语法文件 (.xshd) 并将其嵌入到我的程序集中?

    我正在尝试为 AvalonEdit 定义一些自定义突出显示规则 似乎没有任何相关文档 有有关文件格式的一些文档 http www codeproject com KB edit AvalonEdit aspx 但没有介绍创建定义后如何实际加
  • 创建增量按钮,如果边距大于 2800 像素,该按钮将关闭

    我正在制作一个滑块 并且正在尝试弄清楚如何专门对按钮进行编程 我希望它在单击时以 700 像素的增量向左移动 但是一旦 marginLeft 大于 2800 像素 因为单击时它不会执行任何操作 现在我有以增量移动容器的部分 但我不确定如何制
  • pyspark - 合并 2 列集合

    我有一个 Spark 数据框 它有 2 列由函数collect set 形成 我想将这两列集合合并为一列集合 我应该怎样做呢 它们都是一组字符串 例如 我有两列是通过调用collect set形成的 Fruits Meat Apple Or
  • 如何用正确的行数填充表格以适应不同屏幕分辨率下的页面高度?

    我在前端开发了自己的网络管理 这是一个典型的 Admin 其中包含容器 左侧的一个菜单导航和右侧的正文内容 其中显示与单击的菜单项相关的结果 通常是表格 为了以 100 适合正文页面 获得表格中正确的行数或行数的最佳方法是什么 就我而言 我
  • 如何使用 Azure DevOps REST API 更新文件?

    我正在尝试更新test json文件托管在 Azure DevOps Repo 上 我正在使用逻辑应用程序 无法从文档中识别操作顺序 我想我需要 向以下地址发出 GET HTTP 请求Items端点 https learn microsof
  • PhpStorm 终端:Cygwin 颜色不起作用

    我有 PhpStorm 2016 2 并在 Shell 路径中添加了 Cygwin 如下所示 C cygwin64 bin env exe CHERE INVOKING 1 bin bash exe 它运行良好 但颜色不起作用 例如我有 3
  • EntityNotFoundException:Bean 已被删除 - 延迟加载失败

    我正在迈出 Play 的第一步 使用 Java 的框架 v2 1 rc1 现在我遇到了 ebean 的第一个问题 我有一个与其自身具有多对一关系的导航实体 当我尝试访问parentNavigation中的标题字段时 我收到以下错误 Enti
  • 通过 SSH 连接到位于 VPC 私有子网中的 AWS EC2 实例

    我已经研究这个问题几个小时了 也许这是不可能的 也许是不可能的 我在 AWS 中有一个 VPC 带有几个 EC2 实例和 Lambda 实例 截至目前 lambda 可以毫无问题地调用 ssh 等连接 EC2 服务器 我的 lambda 在
  • 自动初始化 Typescript 中字符串文字类型的成员字段

    如果我有课的话 class Foo type foo constructor public id number class Bar type bar constructor public id number type SomeUnion F