Typescript 接口类型,具有不同类型的可选键和 strictNullChecks

2024-02-02

我正在尝试在打字稿中创建以下界面:

type MoveSpeed = "min" | "road" | "full";

interface Interval {
  min?: number,
  max?: number
}

interface CreepPlan {
  [partName: string] : Interval;
  move?:    MoveSpeed;
}

然而,这个语法是无效的。编译器说Property 'move' of type '"min" | "road" | "full" | undefined' is not assignable to string index type 'Interval'..

我正在使用编译器选项strictNullChecks:true, 这就是为什么undefined隐式包含在move? key.

然而,这个语法是有效的:

type MoveSpeed = "min" | "road" | "full";

interface Interval {
  min?: number,
  max?: number
}

interface CreepPlan {
  [partName: string] : Interval;
  move:    MoveSpeed;            // 'move' is required
}

我想表达这样的想法:“CreepPlan 由字符串:间隔对组成,除了可选的“移动”键,它是字符串:移动速度对。”可以用打字稿表达吗?


您说所有属性CreepPlan have Interval- 当您写入时键入值:

interface CreepPlan {
  [partName: string] : Interval;
}

即,任何和每个字符串索引可访问的属性CreepPlan将是一个Interval。这适用于move同样,自从foo['move']是相同的foo.move.

然而,看着Interval,它没有必需的结构:

interface Interval {
  min?: number,
  max?: number
}

该合同中没有必填字段,但它does需要一个对象。它会很乐意接受一个空对象,但它需要一些对象could have a min and max特性。

Your MoveSpeed另一方面,类型允许undefined:

房产“搬家”类型 '"min" | 「路」| “满”|不明确的'不可分配给字符串索引类型“Interval”。

Thus, Interval必须是一个没有必需属性的对象(其中string可以轻松见面)但不允许undefined, which MoveSpeed does allow.

您的类型是不相交的,但直到您解决它们一次或两次之前,这一点并不明显。

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

Typescript 接口类型,具有不同类型的可选键和 strictNullChecks 的相关文章

随机推荐

  • PHP cURL 内容类型未设置

    我想连接一个简单的网络服务 为了发布一些XML 这将在网络服务端正确进行 我需要准备一个正确的请求 我在用cURL对于这样的 try ch curl init if FALSE ch throw new Exception failed t
  • 我该怎么做才能在 WordPress 中获得实际的准备好的语句

    我的公司希望在他们的网站上使用 WordPress 我主要关心的是准备好的语句的使用 根据this https wordpress stackexchange com a 139431 我自己难以置信地阅读了源代码 WordPress 清理
  • 无法将源类型转换为目标类型

    我已经让这个子类实现了我的接口 并且在满足合同方面没有错误 但是 当我尝试在子类的构造函数中设置当前会话时 当它尝试将变量类型与 GetCurrentSession 返回的类型进行比较时 我收到此编译时错误 无法将源类型 IAPISessi
  • SQL Server 2000 - 跳出循环

    我不擅长 SQL Server 2000 我有一个以逗号分隔的 id 列表 我需要查看该 ID 是否存在于表中 如果是这样 我想跳出循环 并将该 ID 保存在可以在存储过程中使用的变量中 这就是我现在正在尝试的 DECLARE coreID
  • 如何使用 std::atomic 实现可重用的线程屏障

    我有 N 个线程执行各种任务 这些线程必须定期与线程屏障同步 如下图所示 有 3 个线程和 8 个任务 表示时间屏障 所有线程必须等到8个任务完成才能再次启动 Thread 1 task1 task6 wait taskB Thread 2
  • 如何一个接一个地运行参数化作业(没有参数)

    我在 Jenkins 有一份工作 有 2 个参数 我想运行另一个没有参数的计划 并从该计划中根据需要多次启动现有计划 新计划需要安排每 15 分钟运行一次 将由 Jenkins 的调度程序选项完成 该计划的代码将 连接到数据库 获取所需的记
  • 如何进行字段枚举迁移 yii2

    我做了字段ENUM 当我使用时结果是错误的yii migrate up在 CMD 窗口上 public function up tableOptions null if this gt db gt driverName mysql tabl
  • 在 c 中使用 malloc 实现堆栈 [初学者]

    出于学习目的 我正在用 c 语言实现一个堆栈及其函数 我添加了一些小的附加功能来第一次使用 malloc 并尝试正确理解它 我编写了一个最初创建堆栈结构的函数 该函数的返回值是一个具有已分配内存的新结构 在返回值应该是结构的函数中处理 ma
  • 如何在 emacs-ess 中的 R 会话之间切换?

    我在 Emacs ESS 中打开了两个会话 一个在我的桌面上 另一个在使用 trapmp 的服务器上 我如何告诉 ESS 使用哪个会话 嗯 我用 M x ess switch process 一直在 Emacs 内的 本地 R 会话之间切换
  • 无法读取 Zsh 历史记录的时间戳

    Problem 了解以下时间戳 1241036430 在 history 1241036336 0 vim zshrc 1241036379 0 vim bin HideTopBar 1241036421 0 ls 1241036430 0
  • Scala fat jar 中的 ExecutionInterceptorChain 中缺少 AWS SDK 执行拦截器

    我对 scala java sbt 相当陌生 这是我第一次调试通过 sbt 在 scala 中运行的代码与从编译的 jar 运行的相同代码之间的差异 我有一些 Scala 代码 它利用 AWS Java SDK 发出一些 S3 请求 当我使
  • 使用 p4merge 作为 git diff 工具

    I use windows 7 我想用p4merge作为 Git 差异 合并工具 我跟随本文 https danlimerick wordpress com 2011 06 19 git for window tip use p4merge
  • 正则表达式仅捕获匹配中捕获组的最后一个实例

    我有以下两种不同语言的正则表达式 它们产生相同的奇怪结果 javaScript 和 Flash 我想知道的不是如何解决它 而是为什么会发生这种行为 正则表达式 2 这里的目标是匹配括号内的字符串 并确保我不会停在转义括号处 如果我有文本输入
  • bash 脚本中的双感叹号

    我知道当打印双感叹号时 它会执行前面的命令 但是回声 给出了一些我不明白的奇怪结果 例如 当在 bash 脚本中键入以下命令时 它也会打印 echo 作为输出的一部分 echo echo This prints the below outp
  • PRISM + MEF -- 导入和导入Many

    FooService cs public interface IFooService int Foo Export Foo1 typeof IFooService public class Foo1 IFooService public i
  • 向多个用户显示由另一个用户插入的数据更新

    我需要在用户输入数据库时 立即向用户显示更新的数据 即在线视图 我正在使用 sql server 并构建一个 c net winform 应用程序 该应用程序将由 3 个用户 U1 U2 U3 在 LAN 上使用 用户将使用应用程序将数据输
  • 如何使用 WebDriver 在 PhantomJS 中处理/接受 JS 警报?

    作为 Selenium 的 PhantomJSDriver 新手 它如何处理 JS 警报 我找到了 JSPhantomonAlert http phantomjs org api webpage handler on alert html文
  • 如何在 Nuxt 中使用猫头鹰旋转木马?

    我想让脚本在每个页面上工作 而不需要加载这些页面 我的静态文件夹中有 owl caroussel 脚本 我已经将其放入 nuxt config js 中 我的放置方式如下 head title title htmlAttrs lang en
  • 可以在单个查询中使用多个数据库吗?

    PHP 如何在一条语句中查询两个数据库的数据 请给我简单的方法 以及如何连接2个数据库来使用它 谢谢 可以在一个查询中使用来自不同数据库的数据库表 if您当前的连接可以访问这两个数据库 您只需在每个表名前加上数据库名称作为前缀即可 SELE
  • Typescript 接口类型,具有不同类型的可选键和 strictNullChecks

    我正在尝试在打字稿中创建以下界面 type MoveSpeed min road full interface Interval min number max number interface CreepPlan partName stri