在 Typescript 中,定义作为实际值子集的类型的正确方法是什么?

2023-12-28

正如标题所示。

在我的 Ionic 2 (Angular2 / TS) 应用程序中,我使用了 cordova 插件(地理位置),它返回一组包含纬度和经度的字段(还有其他字段,例如海拔:数字等)。

然而,这是我唯一感兴趣的两个字段,因此我定义了类型:

   coordinates: {latitude: number; longitude: number;};

这是为最终还具有其他属性的变量定义类型的正确方法吗(例如纬度)? 如果不是,正确的方法是什么?


Typescript 检查类型的形状,并且可以允许额外的属性,只要它可以验证所需的属性是否存在。

例如,您可以定义如下类型和函数:

type Coordinates = {latitude: number, longitude: number};

function logCoordinates(coords: Coordinates) {
  console.log('coordinates:', coords.latitude, coords.longitude);
}

Typescript 会很乐意接受以下任何调用:

logCoordinates({latitude: 1, longitude: 2});

// assuming we have a CoordinateClass know to have lat and long
const coordinates = new CoordinateClass(1, 2); 
logCoordinates(coordinates);

类型注释描述了合约的形状。任何我们能证明满足合同要求的参数都是允许的。然而,额外的属性并不总是被允许的。

如果您有额外的属性并传递对象文字(类实例没有此问题),您可能需要将它们转换为所需的类型:

logCoordinates(<Coordinates>{latitude: 1, longitude: 2, altitude: 3});

您可以使用交叉类型更稳健地解决这个问题,如此处所述 https://github.com/Microsoft/TypeScript/issues/3755,这样就无需通过接受任何不匹配的密钥来进行强制转换:

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

在 Typescript 中,定义作为实际值子集的类型的正确方法是什么? 的相关文章

随机推荐

  • Zipalign - 未找到命令 - MAC 终端

    当我尝试在 apk 上运行 Zipalign 时 出现错误 Command not found 我不太熟悉在 MAC 上使用终端命令 但我已导航到 SDK Tools 文件夹并运行以下命令 zipalign v 4 Project1 apk
  • 将 Swift 与 Qt 结合使用

    我们可以很容易地使用Qt 中的 Objective C 和 C https stackoverflow com questions 23404158 qt run object c code 23404257 23404257 观看了 Ap
  • jQuery:动画后 div 弹回完整尺寸

    在下面的 jQuery 示例中 我将一个 div 放在另一个 div 中 当我将内部 div 的宽度设置为 0 时 外部 div 具有绝对定位 的宽度也会随之减小 这是所希望的 问题是 动画完成后 外部 div 会弹回到原来的大小 这是预期
  • Adobe AIR - 带图像的自定义预加载器

    Folks 我设计了一个Adobe AIR应用 我想展示一些preloader在它打开之前 任何人都可以指导我的教程preloader 专门针对 AIR或者任何已经内置的 Thanks 借助 AIR 我可以想出几种方法来实现这一目标 1 使
  • 无法解决此引用错误

    我一直在编写一个程序 在程序中我必须压缩一些文件 所以我使用了一个名为 Ionic Zip 的插件 当我运行我的程序时 它完全正常 没有错误 但是现在当我在完成编写后尝试构建我的程序时 出现以下错误 Code Warning 1 Could
  • Wcf服务继承(扩展服务)

    我正在开发的程序使用 wcf 公开回调和服务 基本上 服务所做的只是返回一些变量值 至于回调 他们只是更新这些变量 我希望能够公开一个仅包含服务的类以及一个包含服务和回调的类 例如 ServiceContract ServiceBehavi
  • 在带有环回后端的 Angular 应用程序中通过 facebook 登录

    我正在使用 Strongloop 环回后端制作一个有角度的应用程序 我还使用环回护照模块通过 facebook 集成了第三方登录 Loopback example passport 中的一切都很好 并且在重定向到我的应用程序之前 我的应用程
  • 如何获取 PowerShell 脚本的文件系统位置?

    我有一个 PowerShell 脚本位于D temp 当我运行此脚本时 我希望列出文件的当前位置 我该怎么做呢 例如 此代码将在 DOS 批处理文件中完成它 我正在尝试将其转换为 PowerShell 脚本 FOR f usebackq t
  • 匹配 SHA1 的正则表达式

    我正在尝试将通用文本中的 SHA1 与正则表达式进行匹配 理想情况下 我想避免匹配单词 可以肯定地说 完整的 SHA1 具有独特的模式 它们很长且长度一致 因此我可以可靠地匹配它们 但缩写的 SHA1 又如何呢 我可以依赖数字的存在吗 查看
  • 发出蜂鸣声直到有任何输入

    我正在制作一个测验程序 所以我想要的是 每当用户提出任何问题时 他都有 30 秒的时间来回答 在这 30 秒内 我希望每隔 1 秒发出一次嘟嘟声 a 现在我想要的是 一旦用户输入任何输入 这种蜂鸣声就应该停止 我创建了这个小函数来产生 30
  • 玩:如何从 JSON 中删除没有值的字段并用它们创建一个新的 JSON

    给定以下 JSON field1 value1 field2 field3 value3 field4 如何获取两个不同的 JSON 一个包含有值的字段 另一个包含没有值的字段 最终结果应如下所示 field1 value1 field3
  • 一组值的所有可能分组的数量?

    我想找到一个组合公式 给定一定数量的整数 我可以找到这些整数的所有可能分组的数量 这样所有值都属于一个组 假设我有 3 个整数 1 2 3 将有 5 组 1 2 3 1 2 3 1 2 3 1 2 3 2 1 3 我已经通过计算计算了 N
  • 启动 hadoop 流作业的替代方法

    我可以从终端成功启动 hadoop 流作业 但我正在寻找通过 api eclipse 或其他方式启动流作业的方法 我发现的最接近的是这篇文章https stackoverflow com questions 11564463 remotel
  • 如何优化分配恒定股息?

    优化为除以众所周知 gcc 对常量进行了很好的优化 现在我想知道如何dividing常数被优化 gcc 不能帮助我 clang 也是如此 也许我不擅长搜索这些信息 但我找不到关于优化的材料除常数 相比之下 除以常数介绍得很好 include
  • 无法在 NetBeans 中创建 Java Web 应用程序

    我想使用 NetBeans 7 0 1 编写一个 java Web 应用程序 但我找不到该选项Java Web in File gt New Project 我需要获得任何特殊的 Java 版本才能做到这一点吗 转到 工具 菜单并选择 插件
  • 有没有办法扩展 ThreeJS 对象?

    我正在使用 ThreeJS 创建一个交互 人们可以在其中单击立方体 然而 这些立方体在单击时的行为有所不同 不同的颜色动画 以保持想法简单 我的想法是创建 THREE Mesh 对象的扩展类并添加我的自定义函数和属性 这将有助于隔离多维数据
  • 更改 UINavigationBar 外观背景时状态栏颜色发生变化

    我使用这行代码来更改导航栏背景 UINavigationBar appearance setBackgroundImage UIImage imageNamed image png forBarMetrics UIBarMetricsDef
  • 奇怪的 IE8 内部 [[ class ]] 属性行为

    我最近在使用 IE8 目前我不知道 9 时遇到了一些麻烦 无法读取和比较某些值 Class 特性 事实上 这仅适用于以下情况localStorage object 我正在使用这样的方法 var ToStr Object prototype
  • 函数不在所有代码路径上返回值 Vb.net

    我对编程有点陌生 并且在完成这项工作时遇到了困难 我应该使用委托运行此代码 但我在错误之后遇到了错误 我正在使用Vb net 谁能帮我解决这段代码中的问题吗 Public Delegate Function D Dim Str As Str
  • 在 Typescript 中,定义作为实际值子集的类型的正确方法是什么?

    正如标题所示 在我的 Ionic 2 Angular2 TS 应用程序中 我使用了 cordova 插件 地理位置 它返回一组包含纬度和经度的字段 还有其他字段 例如海拔 数字等 然而 这是我唯一感兴趣的两个字段 因此我定义了类型 coor