typescript - 构造函数中复杂参数的默认值
问题描述
如果这个问题是重复的,我最近很抱歉。但是我没有找到解决我的问题的方法。并提前感谢您的回复。
因此,如果我有以下接口,其中包含一些可选参数作为构造函数中的参数
interface User {
firstname: string,
lastname: string,
onFirstNameChanged?: (name: string) => void,
onLastNameChanged?: (name: string) => void,
}
并且我想创建一个新的类实例,我想在其中提供带有此接口的参数,如何设置可选参数的默认值onFirstNameChanged
和onLastNameChanged
?
我已经尝试了以下代码,但它不起作用并发送一个异常,告知未设置默认值
constructor(
private user: User = {...user, onFirstNameChanged: () => {}, onLastNameChanged: () => {}}
) {
// ...do some stuff
}
当然,有很多解决方案可以用不同的方式解决它,例如检查 costructor 主体内是否存在参数,但我问的是默认值。
这里的例子。
解决方案
您可以在调用函数之前进行检查
changeName = () => {
const name = 'Dave';
this.user.onFirstNameChanged && this.user.onFirstNameChanged(name)
}
或者,如果您确定某些功能可用,请使用!
运算符
changeName = () => {
const name = 'Dave';
this.user.onFirstNameChanged!(name)
}
我推荐第一个,因为这就是您使用?
运算符使这些功能可选的原因。
推荐阅读
- arm - STM32中断引脚奇怪行为
- java - Android Studio 无法识别同一项目中的 Java 和 Kotlin 类
- bash - 如何处理 bash 脚本中的转义用户事件描述以传递给 sed 命令?
- flutter - VS Code 未将 Chrome 显示为 Flutter 的设备
- javascript - 由Javascript函数计算并显示在另一个文本框中的结果->打开网页时不会立即出现
- python - 从 FeatureUnion 中提取顶级特征的问题
- python - 如何对numpy数组中的第一行进行排序并对第二行进行排序?
- angular - 赛普拉斯 - 无法获得跨度的内容
- vba - 使用 Excel FileDialog 对象后将焦点返回到 Outlook 自定义表单
- ios - iOS/macOS 应用内购买 - 在 KeyChain 中保存什么