设置作为参数传递的 TypeScript 对象的默认值

2023-11-29

function sayName(params: {firstName: string; lastName?: string}) {
    params.lastName = params.lastName || 'smith';  // <<-- any better alternative to this?
    var name = params.firstName + params.lastName
    alert(name);
}

sayName({firstName: 'bob'});

我曾想象过这样的事情可能会起作用:

function sayName(params: {firstName: string; lastName: string = 'smith'}) {

显然,如果这些是简单的论点,你可以这样做:

function sayName(firstName: string, lastName = 'smith') {
    var name = firstName + lastName;
    alert(name);
}

sayName('bob');

在 CoffeeScript 中,您可以访问条件存在运算符,因此可以执行以下操作:

param.lastName ?= 'smith'

编译为 javascript:

if (param.lastName == null) {
    param.lastName = 'smith';
}

事实上,现在看来有一个简单的方法。以下代码适用于 TypeScript 1.5:

function sayName({ first, last = 'Smith' }: {first: string; last?: string }): void {
  const name = first + ' ' + last;
  console.log(name);
}

sayName({ first: 'Bob' });

技巧是首先将要从参数对象中选取的键放入括号中,然后使用key=value对于任何默认值。遵循:和类型声明。

这与您想要做的有点不同,因为不是拥有完整的params对象,而是取消引用的变量。

如果您想让它可选地向函数传递任何内容,请添加?对于该类型中的所有键,并添加默认值={}在类型声明之后:

function sayName({first='Bob',last='Smith'}: {first?: string; last?: string}={}){
    var name = first + " " + last;
    alert(name);
}

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

设置作为参数传递的 TypeScript 对象的默认值 的相关文章

随机推荐

  • Java:以一定角度移动对象并使用 KeyPress 改变角度

    好的 所以我想要的是矩形始终移动 但是当您按下左右箭头时 会通过增加或减少角度来改变方向 使用此代码 正方形会按照正确的方向移动 但是当我按下按键时 方向不会改变 import java awt import java awt Color
  • 需要帮助纠正用 Javascript (node.js) 编写的 CRC-ITU 检查方法中的问题

    我们正在尝试在 Javascript 上编写 GPS 设备侦听器代码 在此过程中 我们无法开发正确的 CRC ITU 错误检查脚本 协议文档生成crc码的解释如下 终端或服务器可以使用校验码来区分 接收到的信息是否有误 为了防止错误 数据传
  • xmlstarlet XPath 表达式选择单个结果而不是多个

    我有一个 XML 文件 其结构如下
  • 不在“程序和功能”控制面板中显示应用程序版本

    可以删除或隐藏AppVersion从安装 我不想看到程序版本 程序及特点 安装后 Set AppVersion空 或删除该行 因为该指令默认为空 但是 那么你必须设置AppVerName 根据您的需要 将其设置为My Program 1 0
  • 自定义旋转弹出窗口

    我想修改微调弹出对话框 我想实现我自己的自定义旋转弹出窗口 可能还是不可能 任何人都可以为我提供解决方案来实现自定义微调器弹出窗口吗 这是为了统一我的应用程序中的各种弹出窗口而做出的努力 看到这里是一个简单的例子 它让您了解如何构建自定义微
  • SwiftUI:.contextMenu 关闭时的通知(iOS)

    我在用着 contextMenu和 一起 onDrag在视图上 这似乎非常棘手 通过设置背景颜色变为灰色dragging为真 这是由 onDrag打开上下文菜单时已经发生了这种情况 有点早但还可以 当我使用按钮关闭菜单时 我可以设置drag
  • 在 IIS7 中将表单发送到 404 + HttpHandler:为什么所有 POST 数据都丢失了?

    好吧 这可能听起来有点令人困惑和复杂 所以请耐心听我说 我们编写了一个框架 允许我们定义友好的 URL 如果您浏览任意 URL IIS 会尝试显示 404 错误 或者在某些情况下显示 403 14 或 405 但是 IIS 已设置为将任何针
  • Gatttool非交互模式--char-write

    仍在询问 BLE 设备和gatttool 我可以在交互模式下发送 char write cmd 但无法在非交互模式下执行相同的操作 这是我以交互模式发送的内容 gatttool I gt connect BTADDR BTADDR gt c
  • 自动化 Team Foundation Build 配置

    我目前正在寻找一种无需使用配置向导即可配置 Team Foundation Build 服务 一个构建代理的方法 有没有办法做到这一点 无论是通过命令行 我还没有找到 TFS Build 的任何命令行安装选项 还是通过 API Thanks
  • 如何使用WebRTC将视频流传输到RTMP?

    我正在尝试构建一项服务 将您的屏幕从浏览器流式传输到客户端 例如抽搐 我所完成的是我用 rtmp 构建了一个工作的 nginx 服务器 我使用 OBS 对其进行了测试 这效果很好 我的问题是如何使用 WebRTC 将屏幕从浏览器 不是来自
  • 将向量的每个元素与第二个向量的每个元素相加

    我有两个向量 我想要一个矩阵 其元素是向量 1 的每个元素和向量 2 的每个元素的总和 例如 该矩阵第一行的第一个元素是向量1的第一个元素和向量2的第一个元素的和 第一行的第二个元素是向量 1 的第一个元素与向量 2 的第二个元素之和 依此
  • 查看同一个表中的另一条记录时将 SQL 子查询转换为联接 Access 2010

    我读过联接比子查询更有效 我有一个查询非常慢并且使用大量子查询 因此我想改进它但不知道如何改进 我有以下表格 People this table stores lists of individual people with the foll
  • adb devices 命令和 eclipse 无法识别我的索尼爱立信 xperia x10

    我使用的是Windows XP adb devices 命令不显示我的 xperia x10 和 eclipse 无法识别我的 xperia x10 我有 htc magic 效果很好 我从以下位置下载了驱动程序 http develope
  • Google Chart vAxis 值未显示

    我正在处理各种图表 并在单个页面中显示多个图表 不知何故 vAxis 值没有显示在某些图表上 但它显示在一些独立的图表中 我们可以说它在不同的部分并手动触发 我已经尝试了我能尝试的一切 var data google visualizati
  • 错误:ORA-01704:字符串文字太长

    当我尝试在具有数据类型的字段上设置超过 4000 个字符的值时CLOB 它给了我这个错误 ORA 01704 字符串文字太长 任何建议 如果我必须设置无限字符的值 哪种数据类型将适用于我 尽管对于我的情况来说 它恰好是关于15000 cha
  • IE8中的settimeout问题

    我在 IE8 中使用 javascript setTimeout 函数时遇到一个奇怪的问题 我想像这样使用 setTimeout 函数 setTimeout timeout 2000 name saarthak function timeo
  • Domino 中的身份验证和 Web 服务?

    有没有办法允许在 Domino Web 服务中进行身份验证 如果是这样 我该怎么做 IBM 有一个例子here 有other options
  • 自定义类中没有实体管理器和 ContextErrorException

    我正在尝试在 Sonata Admin 中创建自定义表单 我想将数据从数据库获取到选择框 当我尝试通过 getEntityManager 获取数据时出现错误 No entity manager defined for class Admin
  • “a”在 JVM 指令(如“a load”或“a return”)中意味着什么?

    a 在 JVM 指令 如 a load 或 a return 中意味着什么 我知道它们对引用进行操作 但为什么它们被命名为 aload astore 等而不是 reload restore 等 我相信历史上 a 代表 地址 因为对象引用只是
  • 设置作为参数传递的 TypeScript 对象的默认值

    function sayName params firstName string lastName string params lastName params lastName smith lt lt any better alternat